思路:
将二进制位与10101010 10101010 10101010 10101010按位与(即与0xaaaaaaaa按位与)可保留原数据的奇数位,将二进制位与01010101 01010101 01010101 01010101按位与(即0x55555555)可保留原数据的偶数位,然后将保留奇数位的数右移一位可变为偶数位,将保留偶数位的数左移一位可变为奇数位,最后相加,即可得到奇数位与偶数位想交换的数。
代码:
#include <stdio.h>
#define SWAP_BIT(n) (n=((n&0xaaaaaaaa)>>1)+((n&0x55555555)<<1))
int main()
{
int a = 10;
//00000000 00000000 00000000 00001010 - 10
//00000000 00000000 00000000 00000101 - 5;
SWAP_BIT(a);
printf("%d\n", a);
return 0;
}