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

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

例如:输入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
#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;
}
定义宏时若有参数必须给每一个参数带上括号。

你可能感兴趣的:(c/c++)