思路
首先,我们想到的是交换二进制数的奇数位和偶数位。
eg: 11的二进制为 ........0000 1011
交换后应该是:......0000 0111
那我们可以通过位操作把奇数位往左移一位,偶数位往右移一位即可做到。
那怎么移位呢?请看下图:
代码实现
#include <stdio.h>
#define swap(num) ((num & 0x55555555) << 1) | ((num & 0xAAAAAAAA) >> 1)
//奇数位左移,偶数位右移
int main()
{
int num = 0;
printf("请输入一个数:\n");
scanf("%d",&num);
printf("交换后为:%d\n",swap(num));
return 0;
}
效果截图
11的二进制为0000 1011
7的二进制为0000 0111,实现。