【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语言】全局搜索变量却找不到定义?原来是因为宏!
使用条件编译和 `extern` 来管理全局变量的定义和声明是一种有效的技术,但应谨慎使用。在可能的情况下,应该优先考虑使用局部变量、函数参数和返回值、静态变量或者更高级的封装技术(如结构体和类)来减少全局变量的使用。
37 5
|
1月前
|
存储 网络协议 算法
【C语言】进制转换无难事:二进制、十进制、八进制与十六进制的全解析与实例
进制转换是计算机编程中常见的操作。在C语言中,了解如何在不同进制之间转换数据对于处理和显示数据非常重要。本文将详细介绍如何在二进制、十进制、八进制和十六进制之间进行转换。
41 5
|
5月前
|
编译器 程序员 C语言
C语言 宏
C语言 宏
51 5
|
6月前
|
Linux C语言
C语言宏IS_REACHABLE
C语言宏IS_REACHABLE
52 1
|
7月前
|
存储 C语言
【C语言刷题系列】求一个数组中两个元素a和b的和最接近整数m
【C语言刷题系列】求一个数组中两个元素a和b的和最接近整数m
|
7月前
|
C语言
【C语言刷题系列】交换整数的奇数位和偶数位
【C语言刷题系列】交换整数的奇数位和偶数位
|
7月前
|
安全 编译器 C语言
【C语言进阶篇】offsetof宏的介绍 及其实现
【C语言进阶篇】offsetof宏的介绍 及其实现
|
1月前
|
存储 C语言 开发者
【C语言】字符串操作函数详解
这些字符串操作函数在C语言中提供了强大的功能,帮助开发者有效地处理字符串数据。通过对每个函数的详细讲解、示例代码和表格说明,可以更好地理解如何使用这些函数进行各种字符串操作。如果在实际编程中遇到特定的字符串处理需求,可以参考这些函数和示例,灵活运用。
67 10
|
1月前
|
存储 程序员 C语言
【C语言】文件操作函数详解
C语言提供了一组标准库函数来处理文件操作,这些函数定义在 `<stdio.h>` 头文件中。文件操作包括文件的打开、读写、关闭以及文件属性的查询等。以下是常用文件操作函数的详细讲解,包括函数原型、参数说明、返回值说明、示例代码和表格汇总。
52 9