写一个宏可以将一个数字的奇数位和偶数位交换
分别取出数字的所有奇数位和偶数位,将所有奇数位左移一位,所有偶数位右移一位,所得结果按位或即可
程序代码如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include <Windows.h>
#include <stdio.h>
#define CHANGE(N) ((N &(0x55555555))<<1)|((N &(0xAAAAAAAA))>>1)//0x是16进制的,拿出数的奇数位和偶数位,再按位或
int main()
{
int n = 0;
scanf("%d", &n); //输入数字
int ret = CHANGE(n);
printf("%d", ret);
system("pause");
return 0;
}
运行结果如图: