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

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

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

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

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

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


2fe89ace982b4277bec13865e23aed47.gif


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


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 <stdio.h>
#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.利用宏的性质【替换】来实现函数的性质


本节内容 完

相关文章
|
1天前
|
C语言
C语言进阶21收尾(编程练习)(atoi,strncpy,strncat,offsetof模拟实现+找单身狗+宏交换二进制奇偶位)(下)
C语言进阶21收尾(编程练习)(atoi,strncpy,strncat,offsetof模拟实现+找单身狗+宏交换二进制奇偶位)
6 0
|
1天前
|
C语言
C语言进阶21收尾(编程练习)(atoi,strncpy,strncat,offsetof模拟实现+找单身狗+宏交换二进制奇偶位)(上)
C语言进阶21收尾(编程练习)(atoi,strncpy,strncat,offsetof模拟实现+找单身狗+宏交换二进制奇偶位)
9 0
|
1天前
|
自然语言处理 编译器 Linux
C语言进阶⑳(程序环境和预处理)(#define定义宏+编译+文件包含)(下)
C语言进阶⑳(程序环境和预处理)(#define定义宏+编译+文件包含)
5 0
|
1天前
|
程序员 编译器 C语言
C语言进阶⑳(程序环境和预处理)(#define定义宏+编译+文件包含)(中)
C语言进阶⑳(程序环境和预处理)(#define定义宏+编译+文件包含)
11 0
|
1天前
|
存储 程序员 编译器
C语言进阶⑳(程序环境和预处理)(#define定义宏+编译+文件包含)(上)
C语言进阶⑳(程序环境和预处理)(#define定义宏+编译+文件包含)
11 0
|
6天前
|
存储 Linux C语言
C语言进阶第十一节 --------程序环境和预处理(包含宏的解释)-2
C语言进阶第十一节 --------程序环境和预处理(包含宏的解释)
|
6天前
|
自然语言处理 Linux 编译器
C语言进阶第十一节 --------程序环境和预处理(包含宏的解释)-1
C语言进阶第十一节 --------程序环境和预处理(包含宏的解释)
|
C语言
《C语言及程序设计》实践参考——分离整数和小数部分
返回:贺老师课程教学链接  C语言及程序设计初步  项目要求 要求:编写一个程序,其功能为:从键盘上输入一个浮点数(小数点后有三位数),然后分别输出该数的整数部分和小数部分。样例输入:123.456样例输出:123 456 [参考解答] #include &lt;stdio.h&gt; int main() { float x; int a, b; scanf("%
1886 0
|
5天前
|
C语言
C语言—内存函数的实现和模拟实现(内存函数的丝绸之路)
C语言—内存函数的实现和模拟实现(内存函数的丝绸之路)
18 0
|
5天前
|
C语言
C语言—字符函数与字符串函数(字符问题变简单的关键之技)
C语言—字符函数与字符串函数(字符问题变简单的关键之技)
6 0