当前位置: 首页 > news >正文

宏定义实现二进制数的奇偶位交换

思路分析

通过宏定义来实现二进制数的奇偶位交换,如果一个个遍历交换的话,那得算到猴年马月,这是我在网上看到的一个思路:

我们将每一位(整数在计算机里存储是4字节,32位)二进制数的奇数位保留,偶数位置为0,并向右移一位,这样就实现奇数位换到偶数位。同样的道理,再将偶数位保留,奇数位置为0,并左移一位实现偶数位到奇数位的交换。

最后将得到的两个数加起来,神奇的事情出现了:完成了交换(作者本人实现时震惊了一下,太巧妙了)。

步骤解析

1.将奇数位保留,可以利用与的思想(同1为1,有0为0),将奇数位每一位与1就保留了奇数位的值,与的值奇数位为1,偶数为置为0,0101(5),需要32位,转换为16进制就是0x55555555.再左移1位完成交换

2.偶数位就与1010(10),16进制为0xaaaaaaaa。再右移一位完成交换

3.最后再相加起来,就是我们需要的值。

#define _CRT_SECURE_NO_WARNINGS 1
#define change(n) (n=((n&0xaaaaaaaa)>>1)+((n&0x55555555)<<1))
#include<stdio.h>int main()
{int a = 10;change(a);printf("%d", a);return 0;}

http://www.lryc.cn/news/193607.html

相关文章:

  • 【ELK 使用指南】ELK + Filebeat 分布式日志管理平台部署
  • 传输层 | UDP协议、TCP协议
  • Webmin(CVE-2019-15107)远程命令执行漏洞复现
  • 嵌入式实时操作系统的设计与开发 (前后台系统)
  • Macos数字音乐库:Elsten Software Bliss for Mac
  • 基于SpringBoot的校园周边美食探索及分享平台的设计与实现
  • GPT-4V的图片识别和分析能力
  • 蓝桥杯(等差素数列,C++)
  • Ceph 中的写入放大
  • Mabatis-puls强于Mybatis的地方
  • vue项目npm intall时发生版本冲突的解决办法
  • tomcat多实例部署jenkins
  • 强连通分量+缩点
  • 如何做系统架构设计
  • L14D6内核模块编译方法
  • PyTorch入门教学——dir()函数和help()函数的应用
  • 使用Elasticsearch来进行简单的DDL搜索数据
  • 【软考】9.3 二叉树存储/遍历/线索/最优/查找/平衡
  • 关于矿井地面电力综合自动化系统的研究与产品选型
  • 论文阅读:Offboard 3D Object Detection from Point Cloud Sequences
  • Python学习基础笔记六十八——循环
  • 部署k8s dashboard(这里使用Kubepi)
  • Java Lambda表达式的使用
  • 【初始C语言8】详细讲解初阶结构体的知识
  • <C++> IO流
  • 基于单目相机的2D测量(工件尺寸和物体尺寸)
  • 23面向对象案例1
  • go语言基础之常量与itoa
  • 民宿酒店订房房态商城小程序的作用是什么
  • acwing算法基础之数据结构--栈和队列