【C语言】写一个宏实现将一个整数的二进制的奇数位和偶数位交换
大家好,欢迎来阅读子豪的文章,大家有什么宝贵的意见或建议可以在留言区留言
如果你喜欢我的文章,欢迎 素质三连 点赞 关注 收藏
我的码云仓库:补集王子 (YZH_skr) - Gitee.com
不要偷偷拿走我的小火车哦~嘿嘿

今天我们来写一个宏:将一个整数的二进制的奇数位和偶数位交换
目录
1. 取出奇数或者偶数 按位与 0101010类似的数据
2.移位
3.合成
4.宏的实现
5.总结
1. 取出奇数或者偶数 按位与 0101010类似的数据
0x 5 5 5 5 5 5 5 5 按位与 这个 就保留了 奇数 5 —> 0101
将&之后的数据 向左移动一位 就将奇数位的数据放到了偶数位
2.移位
(num&0x55555555)<<1 奇数位去偶位置
同样的方式我们可以得到偶数然后向右移动一位 奇数位就去了偶数位的位置
(num&0xaaaaaaaa)>>1 偶数位去奇位置
3.合成
之后我们把这两个操作完后的数据一加 就得到了我们想要的数据
num = ((num&0x55555555)<<1)+((num&0xaaaaaaaa)>>1)
4.宏的实现
将以上方法用宏来实现
#include
#define SWAP(num) (num = ((num&0x55555555)<<1)+((num&0xaaaaaaaa)>>1))int main()
{int num = 10; //00000000000000000000000000001010 10SWAP(num);printf("%d", num); //00000000000000000000000000000101 5return 0;
}
5.总结
1.思考这类二进制的操作问题肯定第一反应是想到 与 或 异或 移位 之类的操作符
2.结合二进制本身性质,加上一些数学思维就能解题
3.利用宏的性质【替换】来实现函数的性质
本节内容 完
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
