【C语言】写一个宏实现将一个整数的二进制的奇数位和偶数位交换

大家好,欢迎来阅读子豪的文章,大家有什么宝贵的意见或建议可以在留言区留言

如果你喜欢我的文章,欢迎 素质三连 点赞 关注 收藏

我的码云仓库:补集王子 (YZH_skr) - Gitee.com

不要偷偷拿走我的小火车哦~嘿嘿

【C语言】写一个宏实现将一个整数的二进制的奇数位和偶数位交换_第1张图片

今天我们来写一个宏:将一个整数的二进制的奇数位和偶数位交换

目录

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    10
    SWAP(num);
    printf("%d", num);    //00000000000000000000000000000101    5
    return 0;        
}

5.总结

1.思考这类二进制的操作问题肯定第一反应是想到 与 或 异或 移位 之类的操作符

2.结合二进制本身性质,加上一些数学思维就能解题

3.利用宏的性质【替换】来实现函数的性质

本节内容 完

你可能感兴趣的:(C语言项目,c语言,开发语言,后端)