经典算法题:将一个整数的二进制位的奇数位和偶数位交换

如果将每一位依次交换太过麻烦,因此可以考虑直接取出整数所有的奇数位和偶数位在交换

a = 11的二进制位:0000 0000 0000 0000 0000 0000 0000 1011
    交换后      :0000 0000 0000 0000 0000 0000 0000 0111

可以考虑将整数&(全为1取1,否则取0)处理

将整数对应的偶数位&0,

奇数位&1

奇数位a&10101010101010101010101010101010
偶数位a&01010101010101010101010101010101

如此就拿到了该整数的奇数位和偶数位

接下来只要使用移位操作符(>和<)将奇数位放到偶数位上,偶数位放到奇数位上就可以了

#define swap(a) (((a)&0x55555555) >> 1) + (((a)&0xaaaaaaaa) << 1)

你可能感兴趣的:(数据结构)