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


本节内容 完

相关文章
|
3月前
|
编译器 程序员 C语言
C语言 宏
C语言 宏
39 5
|
4月前
|
Linux C语言
C语言宏IS_REACHABLE
C语言宏IS_REACHABLE
37 1
|
5月前
|
存储 C语言
【C语言刷题系列】求一个数组中两个元素a和b的和最接近整数m
【C语言刷题系列】求一个数组中两个元素a和b的和最接近整数m
|
5月前
|
C语言
【C语言刷题系列】交换整数的奇数位和偶数位
【C语言刷题系列】交换整数的奇数位和偶数位
|
5月前
|
安全 编译器 C语言
【C语言进阶篇】offsetof宏的介绍 及其实现
【C语言进阶篇】offsetof宏的介绍 及其实现
|
5月前
|
存储 C语言
【C语言进阶篇】整数在内存的存储——原码、反码、补码
【C语言进阶篇】整数在内存的存储——原码、反码、补码
|
26天前
|
C语言 C++
C语言 之 内存函数
C语言 之 内存函数
31 3
|
17天前
|
存储 缓存 C语言
【c语言】简单的算术操作符、输入输出函数
本文介绍了C语言中的算术操作符、赋值操作符、单目操作符以及输入输出函数 `printf` 和 `scanf` 的基本用法。算术操作符包括加、减、乘、除和求余,其中除法和求余运算有特殊规则。赋值操作符用于给变量赋值,并支持复合赋值。单目操作符包括自增自减、正负号和强制类型转换。输入输出函数 `printf` 和 `scanf` 用于格式化输入和输出,支持多种占位符和格式控制。通过示例代码详细解释了这些操作符和函数的使用方法。
31 10
|
11天前
|
存储 算法 程序员
C语言:库函数
C语言的库函数是预定义的函数,用于执行常见的编程任务,如输入输出、字符串处理、数学运算等。使用库函数可以简化编程工作,提高开发效率。C标准库提供了丰富的函数,满足各种需求。