主体思想 1 分别提取一个数二进制中的奇数位和偶数位
奇数位:x&0x55555555 因为5的二进制序列是0101
偶数位:x&0xaaaaaaaa 因为a的二进制序列是1010
2 将提取出来的奇数位左移一位。偶数位右移一位。
3 进行或运算得到最终答案
例如 把10的二进制序列进行奇数偶数位交换。
10的二进制序列 1010
提取奇数位 :1010 & 0101---->0000 左移一位----->0000
提取偶数位 :1010 &1010----->1010 右移一位----->0101
进行或运算------------------- |
0101
#include<stdio.h>
#include<stdlib.h>
#define EXCHANGE(x) ((((x)& 0x55555555) << 1) | (((x)&0xAAAAAAAA)>>1))
int main()
{
printf("Please Enter: ");
int data = 0;
scanf_s("%d", &data);
printf("%d -> %d\n", data, EXCHANGE(data));
system("pause");
return 0;
}