交换一个数字(二进制数)的奇偶数位
一、进行按位操作,将奇数位和偶数位分别提取出来
二、合并提取出的数字
例:对 5(0101)进行操作变成 10(1010)
#include<stdio.h>
#include<windows.h>
#define M(x) ((((x)&(0x55555555)) << 1) | (((x)&(0xAAAAAAAA)) >> 1))
//提取x的奇数位并左移一位 偶数位左移一位
int main()
{
int x = 5;
printf("交换后:%d\n", M(x));
system("pause");
return 0;
}