#include<stdio.h>
#define SWAP(x) ( ( (x)& 0xaaaaaaaa ) >>1 | (((x)& 0x55555555) <<1) )
//(x)& 0xaaaaaaaa : 0xaaaaaaaa表示的二进制位为:101010.....101010(共三十二位)
//其与x相&,奇数位的数不变,偶数位变为0, 右移以为奇数位的数变为偶数位
//0x55555555: 二进制:010101.....0101 操作同上
//再将两结果相 | (相当加法操作) 便得到二进制奇偶位交换的数
int main()
{
int a = 1;
printf("%0x\n",a);
printf("%0x\n",SWAP(a));
return 0;
}
宏实现---交换一个数二进制的奇偶位
最新推荐文章于 2022-09-23 00:06:46 发布