定义一个宏实现整形数字奇偶位交换(二进制位)

来源:互联网 发布:思科网络防火墙5506 编辑:程序博客网 时间:2024/06/08 15:11

定义一个宏实现把一个整形的二进制位的奇偶进行交换。

例如:输入10   ->1010

          输出 5    ->0101

实现步骤:

        1.把整数的奇数位提出,将偶数位清零(按位与&上0101)

           此刻结果为:0000

        2.同样将偶数位提出,并将奇数位清零(&1010)

           此刻结果为:1010

        3.再将偶数位>>1,奇数位<<1

        4.按位或|

        5.由于32个bit太长,所以为了简洁代码,将4个bit

           用一个16进制表示,即奇数位表示为0101->5,

           偶数位表示为1010->10(A).

#include<stdio.h>#define SWAP(x) ((((x)&0x55555555)<<1)|(((x)&0xAAAAAAAA)>>1))int main(){    int x;printf("Please Enter:");scanf("%d",&x);printf("%d\n",SWAP(x));return 0;}
定义宏时若有参数必须给每一个参数带上括号。

0 0