#define SWAP_BIT(num) (((num & 0xAAAAAAAA) >> 1) | ((num & 0x55555555) << 1))
#include <stdio.h>
int main()
{
int num = 7;
printf("%d\n", SWAP_BIT(num));
return 0;
}
?将num &(0xAAAAAAAA)(10101010101010101010101010101010),可以得到原来num的偶数位不变,奇数位全为0,将其右移一位变成奇数位;
将num & (0x55555555)(01010101010101010101010101010101),可以得到原来num的奇数位不变,偶数位全为0,将其左移一位变成偶数位;
将左右移的数进行按位或,得到奇数位偶数位交换后的数。