#include<stdio.h>
#define swap(num) (num=((num&0x55555555)<<1)+((num&0xaaaaaaaa)>>1))
int main() {
int num = 9;
//00000000 00000000 00000000 00001111
//01010101 01010101 01010101 01010101 0x55555555
//10101010 10101010 10101010 10101010 0xaaaaaaaa
swap(num);
printf("%d\n", num);
return 0;
}
对于交换奇数和偶数的位置,我们可以先把这个数的奇数偶数为全部弄出来&0x55555555就把奇数位全部弄出来了&0xaaaaaaaa就把偶数位全部弄出来了,然后奇数位向左偏移一位(得到偶数位),偶数位向右偏移一位(得到奇数位).再把两者相加起来就行了