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

【宏实现二进制奇偶位交换】

文章目录

  • 一. 二进制奇偶位交换说明意思?
  • 二. 解题思路
  • 三. 代码验证
  • 四. 总结

一. 二进制奇偶位交换说明意思?

  1. 就是一个int类型的整数在操作系统下是32位二进制01序列,第一位和第二位交换,第二位和第三位交换,依次类推。
  2. 交换奇偶位,需要先分别拿出奇偶位。既然是宏,分别拿出用循环不是很现实,那就用&这些位的方式来做。

二. 解题思路

奇数位拿出,那就是要&上010101010101……,偶数位拿出,就是要&上101010101010……,对应十六进制分别是555……和aaa……,一般我们默认是32位整数,4位对应一位16进制就是8个5,8个a。通过& 0x55555555的方式拿出奇数位和& 0xaaaaaaa的方式拿出偶数位。奇数位左移一位就到了偶数位上,偶数位右移一位就到了奇数位上,最后两个数字或起来,就完成了交换。

举例10这个数字:

  1. 二进制序列00000000000000000000000000001010
  2. 奇位置0,将10位&上01010101010101010101010101010101
    结果:00000000000000000000000000000000
  3. 偶位置0, 将10位&上10101010101010101010101010101010
    结果:00000000000000000000000000001010
  4. 将步骤二结果左移一位:00000000000000000000000000000000
  5. 将步骤三结果右移一位:00000000000000000000000000000101
  6. 将步骤四和步骤五结果相加即使答案:
    00000000000000000000000000000101
    最终交换后结果为5

三. 代码验证

#include<stdio.h>#define SWAP(n) (((n&0x55555555)<<1)+((n&0xaaaaaaaa)>>1))int main()
{int n = 0;scanf("%d", &n);printf("交换后%d", SWAP(n));return 0;
}

在这里插入图片描述

四. 总结

既然使奇偶交换,第一步先将奇数位全变0,那么就可以将偶数位全左移一位到奇数位,第二步将偶数位全变0,将奇数位全右移一位到偶数位,两结果相加就实现了奇偶交换
最后小编制作不易,麻烦各位兄弟们,点点关注!

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

相关文章:

  • 【Java零基础入门到就业】第一天:java简介和cmd窗口的一些常见命令
  • ubuntu下yolov5 tensorrt模型部署
  • windows Vscode 连接 虚拟机,超详细,含免密免ip配置 以 linux 虚拟机为例
  • 【Unity】VR基础开发2项目准备-VR基本场景构建(OpenXR方向)
  • git checkout 命令
  • 二.镜头知识之镜头总长,法兰距,安装接口
  • Android studio控制台 输出乱码解决方法
  • Hermes - 指尖上的智慧:自定义问答系统的崭新世界
  • 机器学习笔记 - 使用3D卷积神经网络进行视频分类
  • 在Unity中挂载C#脚本的三种方法
  • vue elementui的select组件实现滑到底部分页请求后端接口
  • 【Java 进阶篇】JavaScript电灯开关案例:从原理到实现
  • 并发、并行、同步、异步、阻塞、非阻塞
  • C语言:冒泡排序
  • Android 内容提供者和内容观察者:数据共享和实时更新的完美组合
  • 六、K8S之StatefulSet
  • 基于微服务+Java+Spring Cloud开发的建筑工地智慧平台源码 云平台多端项目源码
  • 微信小程序异常:navigateTo:fail can not navigateTo a tabbar page
  • 智慧公厕高精尖技术揭秘,让卫生管理更智能、更舒适
  • Spring Cloud的革新:服务网格和云原生整合
  • EfficientDet: Scalable and Efficient Object Detection
  • 【数据结构】二叉树链式存储及遍历
  • 数字孪生技术:新零售的未来之路
  • NIO教程
  • 【MySQL】表的内连和外连
  • 文心一言:文心大模型 4.0 即将发布
  • HTML笔记
  • design compiler中的drc规则详解
  • CEC2013(MATLAB):螳螂搜索算法(Mantis Search Algorithm,MSA)求解CEC2013
  • 【错误:No package snapd available.】在 CentOS 上启用 snap 并安装 snapd