写一个宏可以将一个数字的奇数位和偶数位交换
思路:(实现:奇偶位交换)
1.进行位操作,位运算应该是标配,最好最简单的方法了。
2.实现交换,常见交换有数组赋值交换 地址交换 还有位直接操作(不要第三方)进行交换。->选择位操作交换
3.整形占4个字节 分别于用八进制0x55555555 与0xAAAAAAAA和整形数进行 相与(不交换的位用与进行清0) 结果分别相或
便可以实现位交换
//用宏实现
#include<stdio.h>
#define CHANGE(X)\
(((X&(0x55555555))<<1)|((X&(0xAAAAAAAA))>>1))
int main()
{
int x = 5;
printf("%d\n", CHANGE(x)); //5的二进制:0101 交换后得二进制:1010 其值为10
return 0;
}