1.我们使用宏定义的形式把一个整数的二进制的奇数位和偶数位进行交换.
思路:
a.(该整数为int类型)所以有32个比特位,因此我们可以找一个奇数位全为1偶数位全为0的数,和一个偶数位全为1奇数位全为0的数,分别使用与运算将这个整数的奇数位和偶数位全部提取出来.
b.然后提取出来的奇数位后移一位变成偶数位,偶数位前移一位变成奇数位,然后使用或运算结合起来,就完成了奇数位和偶数位的交换.
c.奇数位全为1偶数位全为0的数:0x55555555
d.奇数位全为0偶数位全为1的数:0xaaaaaaaa
我们举个例子具体运算一下:
具体代码如下:
#define judge(i) ((0xaaaaaaaa&i)>>1)|((0x55555555&i)<<1)
//交换一个整数的二进制的奇数位和偶数位
int main() {
int temp = 10;
printf("%d", judge(temp));
return 0;
}