交换奇偶位
写一个宏,可以将一个整数的二进制位的奇数位和偶数位交换。
#define Swap(x) x=(((x&0x55555555)<<1)+((x&0xaaaaaaaa)>>1))
int main()
{int a = 10;Swap(a);printf("%d\n", a);return 0;
}
写宏的思路:
假设这个数的二进制是11111111
奇数位01010101
只需要对该二进制位进行按位与01010101即可,而01010101的十六进制数为0x55555555再向前移动一位就可变成偶数位
而偶数位同理,将二进制数与10101010进行按位与操作即可,10101010的十六进制数为0xaaaaaaaa再向后移动一位