用一行代码(宏)交换一个二进制整数的奇数位和偶数位

简介: 用一行代码(宏)交换一个二进制整数的奇数位和偶数位

用一行代码(宏)交换一个二进制整数的奇数位和偶数位

默认二进制数的最低为为奇数位

如果对位运算还不太熟悉,建议先看看👉传送门

·我们以一个例子来分析,例如:

对于二进制数0111 0100 1101 0101

我们交换奇偶位后就变成了:

我们发现,相较于交换前,交换后奇数位整体向左移动了一个单位,偶数位整体向右移动了一个单位

因此,我们只需要将这个数的奇数位和偶数位都提取出来,然后再分别对其进行移动,最后再合并就可以了

  • 要提取奇数位,就需要将每一个奇数位和1进行按位与操作,而数字5的二进制0101刚好符合每一个二进制位为1的特点,因此要提取奇数位,我们可以这么写:
num & 0x55555555
  • 同理,要提取偶数位,就需要一个数字的二进制偶数位都为1,而数字10的二进制1010刚好符合
num & 0xAAAAAAAA
  • 将奇数位向左移动一位,偶数位向右移动一位,最后再按位或,就可以实现交换二进制整数的奇偶位了

实现代码:

#define EXCHANGE(num) ((num & 0xAAAAAAAA) >> 1) | ((num & 0x55555555) << 1)
相关文章
|
网络安全
[网络安全]upload-labs Pass-15 解题详析
[网络安全]upload-labs Pass-15 解题详析
235 0
|
8月前
|
云安全 NoSQL 安全
【Azure Redis】关于Redis的两个安全漏洞在Azure Redis是否修复问题:CVE-2024-51741 和 CVE-2024-46981
本文探讨了两个 Redis 漏洞(CVE-2024-51741 和 CVE-2024-46981)在 Azure Redis 上是否存在安全风险。CVE-2024-51741 可能因格式错误的 ACL 触发拒绝服务,而 CVE-2024-46981 或因恶意 Lua 脚本导致远程代码执行。目前 Azure Redis 使用版本 6.0,不受上述漏洞影响,且 Azure 云服务会及时修复漏洞以确保安全。文章强调 Azure 遵循严格的安全标准,为用户提供可靠保障。
341 4
|
存储 NoSQL Redis
Redis 为什么这么快?4 大核心设计图解!
本文详细解析了 Redis 的高性能设计,包括内存存储、单线程模型、IO多路复用技术和数据结构优化,帮助更好地理解和应用 Redis。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
Redis 为什么这么快?4 大核心设计图解!
|
存储 缓存 算法
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式,强调了合理选择数据结构的重要性,并通过案例分析展示了其在实际项目中的应用,旨在帮助读者提升编程能力。
355 5
|
机器学习/深度学习 人工智能 自然语言处理
揭秘深度学习中的自注意力机制及其在Transformer模型中的应用
揭秘深度学习中的自注意力机制及其在Transformer模型中的应用
|
监控 算法 Linux
Linux下工具tc详细讲解及限制IP和端口实例
TC (Traffic Control) 是Linux内核中提供的一个用于控制和管理网络流量的强大工具,它允许用户实现QoS(Quality of Service)策略,包括带宽限制、优先级控制、延迟保证等。TC基于内核的队列 discipline (qdisc) 和流量类别(class) 体系结构,允许对进入或离开网络接口的数据流进行复杂的整形和过滤。
1160 0
|
存储 关系型数据库 MySQL
mysql中的left join、right join 、inner join的详细用法
【8月更文挑战第16天】在MySQL中,`INNER JOIN`、`LEFT JOIN`与`RIGHT JOIN`用于连接多表。`INNER JOIN`仅返回两表中匹配的行;`LEFT JOIN`保证左表所有行出现于结果中,右表无匹配时以NULL填充;`RIGHT JOIN`则相反,保证右表所有行出现于结果中。例如,查询学生及其成绩时,`INNER JOIN`仅显示有成绩的学生;`LEFT JOIN`显示所有学生及他们对应的成绩,无成绩者成绩列为空;`RIGHT JOIN`显示所有成绩及对应学生信息,无学生信息的成绩条目则为空。
896 1
|
Web App开发 tengine 监控
|
安全
[UDS] --- ReadDataByIdentifier 0x22
[UDS] --- ReadDataByIdentifier 0x22
1191 0
|
存储 弹性计算 安全
阿里云4核8G配置服务器可选实例及收费价格参考
阿里云4核8G配置服务器的价格取决于所选云服务器的实例规格和带宽及系统盘大小,阿里云服务器4核8G配置有将近二十种实例规格可选,目前阿里云活动中4核8G配置有经济型e、通用算力型u1、计算型c7和第八代计算型c8a与c8i实例可选,云服务器ECS经济型e实例4核8G配置1M带宽40GB ESSD Entry云盘优惠价格943.26元/1年,云服务器ECS计算型c7实例4核8G配置3M带宽40GB ESSD云盘优惠价格501.90元/6个月、983.80元/1年。至于选择哪个实例规格,还需要根据自己的需求、预算及上云场景来综合判断。
1120 0
阿里云4核8G配置服务器可选实例及收费价格参考