C语言 宏的使用 让一个数的二进制奇数位与偶数位互换

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));
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值