交換奇偶位
寫一個宏,可以將一個整數的二進制位的奇數位和偶數位交換。
#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再向后移動一位