想要交换一个数的偶数比特位和奇数比特位:
1.要想办法提出奇数为和偶数位
任何数 &1等于它本身,0&任何数都为0,
所以要提出奇数位就要给奇数位都&1,偶数位都&0;要提出偶数位就要给偶数位都&1,奇数位都&0
num&0101 0101 0101 0101 0101 0101 0101 0101 就得到它所有奇数位 =>> num & 0x55555555
同理 要得到所有偶数位 num&0xaaaaaaaa
2.将奇数位放到偶数位,将偶数位放到奇数位
奇数位左移一位到偶数位 (num&0x55555555)<<1
偶数位右移一位到奇数位 (num&0xaaaaaaaa)>>1
3.把奇数位和偶数位合并
把奇数位和偶数位通过 | 运算合并
((num&0x55555555)<<1) | ((num&0xaaaaaaaa)>>1)
#include<stdio.h>
#define SWAPBIT(x) ((((x) & 0xaaaaaaaa) >> 1) | (((x)& 0x55555555) << 1))
int main()
{
int value = 0;
scanf("%d", &value);
printf("After : %d\n", SWAPBIT(value));
system("pause");
return 0;
}