C语言 宏的使用
宏定义是预处理的一种,宏有操作符来表示一个字符串
宏的格式为:
#define 宏名 字符串
define是预处理命令 #也是一条预处理命令,所有的预处理命令都是由 # 开头。
1.宏定义必须写在函数外部,不能写在函数里,它的作用域为宏定义命令的起始到程序结束,如果要提前终止可使用 #undef 命令结束。
2.宏定义的字符串只是一个简单的替换
3.宏定义不是说明语句,在行末尾无需加入分号,如果加入则连分号也一起替换。
奇数位与偶数位互换使用宏替换:
例如10(二进制1010),交换后变成了 5(0101);
可以先把奇数位提取出来 即 X&0101 ,再左移一位变成偶数位 (x&(0x55555555)) << 1;
然后可以把偶数位提取出来即 X&1010,再右移一位变成奇数位 (x&(0xAAAAAAAA))>>1)
最后用或操作把奇偶位连接起来就行了 ((x&(0x55555555)) << 1) | ((x&(0xAAAAAAAA))>>1)
注意:这里的0x55555555,0xAAAAAAAA是十六进制,这样做的好处是,不需要将整数换成二进制,直接位操作返回的就是交换后的十进制整数,操作少。
#include <stdio.h>
#define swap_H(x) ((x&0x55555555)<<1) | ((x&0xAAAAAAAA)>>1) //为宏定义的奇数位与偶数位互换
int main()
{
int a=10;
printf("转换前a=%d ",a);
printf("转化后a=%d",swap_H(a));
}