我们知道宏函数是不可以递归的,所以我们的想法不是把每一位的内容进行交换而是取出偶数位所有的内容和奇数位置的内容通过左右移动加上或运算实现
我先把代码放在这里
#define swapbit(n) (((n&0x55555555)<<1)|((n&0xaaaaaaaa)>>1))
我们要想得到奇数位的内容就需要将n的偶数位置与0,奇数位置与1,而要得到偶数位就需要偶数位置与1,奇数位与0,所以要得到奇数位就需要与上01010101010101010101010101010101,十六进制是4个二进制位为一位的所以改成0x55555555,得到偶数位需要与上10101010101010101010101010101010,改成十六进制就是0xaaaaaaaa,这个时候我们就有了奇数位和偶数位的内容了,然后我们把奇数位向前移动一位,偶数位想后移动一位再与上就可以实现奇偶数位置的交换。