交换一个整数二进制位的奇数位和偶数位

news2024/11/27 2:37:04

目录

一、方案一

1.求待操作数的二进制序列

2.创建一个数组存放待操作数的二进制序列

 3.交换二进制序列奇偶位

 4.输出奇偶位交换之后的二进制序列

 5.代码

二、方案二(宏的实现)

1.求待操作数二进制序列偶数位

2.求待操作数二进制序列奇数位

3.求待操作数交换奇偶位的二进制序列

 4.代码

 

一、方案一

1.求待操作数的二进制序列

        一个整数按位与1可以求得二进制序列的最低位,利用左移操作符每按位与一次左移一位,这样循环32次之后就可得到完整的二进制序列。

2.创建一个数组存放待操作数的二进制序列

        从数组的最后一个元素arr[31]开始存放,依次递减。即二进制序列最高位放在数组的最左边,最低位放在最右边。和实际的二进制序列顺序保持一致。

 

 3.交换二进制序列奇偶位

        把数组中的元素arr[0]和arr[1]进行交换,执行结束向后走两步交换arr[2]和arr[3],以此类推没交换一次先后走两步重复操作,直到交换完做后一个元素arr[31]。

 

 4.输出奇偶位交换之后的二进制序列

        实质上是输出交换顺序后的数组

 5.代码

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void swap_b(int x)
{
	int i = 0;
	int arr[32] = { 0 };
	for (i = 31; i >= 0; i--)
	{
		if ((x & 1) == 0)
		{
			arr[i] = 0;
		}
		else
		{
			arr[i] = 1;
		}
		x = x >> 1;
	}
	printf("二进制位序列:\n");
	for (i = 0; i < 32; i++)
	{
		printf("%d ", arr[i]);
	}
	printf("\n");
	for (i = 0; i < 32; i += 2)
	{
		int tmp = arr[i];
		arr[i] = arr[i + 1];
		arr[i + 1] = tmp;

	}
	printf("交换奇偶位的二进制位序列:\n");
	for (i = 0; i < 32; i++)
	{
		printf("%d ", arr[i]);
	}
	printf("\n");
}
int main()
{
	int a = 0;
	scanf("%d", &a);
	swap_b(a);
	return 0;
}

总结:该方案只能输出待操作数二进制序列交换奇偶位后的二进制序列,并不会改变待操作数本身

二、方案二(宏的实现)

1.求待操作数二进制序列偶数位

        将待操作数与一个二进制序列的偶数位全为1,奇数位全为0的数(0x AA AA AA AA)执行按位与操作,可得到待操作数的偶数位

 

 

2.求待操作数二进制序列奇数位

        将待操作数与一个二进制序列的奇数位全为1,偶数位全为0的数(0x 55 55 55 55)执行按位与操作,可得到待操作数的奇数位

 

3.求待操作数交换奇偶位的二进制序列

        将求得的已知偶数位且奇数位全为0的二进制序列左移一位与已知奇数位并且偶数位全为0的二进制序列右移一位,然后将分别左移、右移后的二进制序列相加即可得到待操作数交换奇偶位的二进制序列

 4.代码

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#define SWAP_B(x) (x)=((((x)&(0xAAAAAAAA))>>1)+(((x)&(0x55555555))<<1))
int main()
{
	int a = 0;
	scanf("%d", &a);
	int i = 0;
	for (i = 31; i >= 0; i--)
	{
		if (((a >> i) & 1) == 1)
		{
			printf("%d ", 1);
		}
		else
		{
			printf("%d ", 0);
		}
	}
	printf("\n");
	SWAP_B(a);
	printf("%d\n", a);
	for (i = 31; i >= 0; i--)
	{
		if (((a >> i) & 1) == 1)
		{
			printf("%d ", 1);
		}
		else
		{
			printf("%d ", 0);
		}
	}
	printf("\n");
	return 0;
}

总结:该方案是直接对待操作数进行操作,会改变待操作数的值。宏的实现既可以得到交换奇偶位后的二进制序列,也可以得到该二进制序列所对应的数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/778270.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

目标检测——yoloV3案例

目录 数据获取TFrecord文件什么是TFrecord文件将数据转换成TFrecord文件读取TFrecord文件数据处理 模型构建模型训练损失函数的计算正负样本的设定模型训练获取数据集加载模型模型训练 模型预测 数据获取 labellmage使用方法 TFrecord文件 什么是TFrecord文件 将数据转换成T…

python暴力破解wifi密码

python破解WiFi密码 无图形化界面版图形化界面版 刚开始怀着是以为可以自动生成并匹配密码进行破解&#xff0c;然后才知道都需要使用密码本&#xff0c;破解都不知道要猴年马月去了。。。。。但可以研究理解一下代码过程 使用pycharm需要调试一下&#xff0c;比较麻烦&#xf…

【Docker】Docker网络与存储(三)

前言&#xff1a; Docker网络与存储的作用是实现容器之间的通信和数据持久化&#xff0c;以便有效地部署、扩展和管理容器化应用程序。 文章目录 Docker网络桥接网络容器之间的通信 覆盖网络创建一个覆盖网络 Docker存储卷 总结 Docker网络 Docker网络是在容器之间提供通信的机…

速成版-带您一天学完python自动化测试(selenium)

Selenium是一套web网站的程序自动化操作解决方案。我们通过编写自动化程序&#xff0c;使得自动完成浏览器界面的相关操作&#xff0c;除了能够自动化的完成相关操作&#xff0c;还能从web页面获取相关信息&#xff0c;然后通过程序进行分析处理&#xff0c;本质上就是提升从网…

微信小程序的微信一键登录与验证码登录

验证码登录 <template><view class"wx-login"><view class"login-Box"><text class"title">欢迎登录</text><text class"subTitle">再就业男团系统</text><view class"login-Form…

pytorch安装GPU版本 (Cuda12.1)教程: Windows、Mac和Linux系统快速安装指南

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

java List的stream().collect()方法实战

文章目录 订单类测试类测试结果 这几天在做银联的银行卡对账时&#xff0c;一开始只使用参考号来确定一笔交易&#xff0c;但是这样是不严谨的&#xff0c;项目经理要求使用商户号、终端号、流水号、批次号、参考号五个数据项来确定唯一性&#xff0c;所以本次list转map是在此背…

分布式调用与高并发处理 Nginx

一、初识Nginx 1.1 Nginx概述 Nginx是一款轻量级的Web服务器、反向代理服务器&#xff0c;由于它的内存占用少&#xff0c;启动极快&#xff0c;高并发能力强&#xff0c;在互联网项目中广泛应用。Nginx 专为性能优化而开发&#xff0c;使用异步非阻塞事件驱动模型。 常见服务…

小程序如何上传商品

​小程序作为一种便捷的电商平台&#xff0c;上传商品是非常重要的一步。本文将为你提供一个完整的小程序上传商品教程&#xff0c;帮助你轻松上架自己的商品。 一、进入商品管理页面 在个人中心点击管理入口&#xff0c;然后找到“商品管理”菜单并点击。 2. 点击“添加商品…

【C++初阶】容器适配器模拟实现栈和队列(附源码)

一.容器适配器 其实在使用模板时&#xff0c;我们不仅可以使用类模板&#xff0c;还可以使用容器模板&#xff0c;这就是一个容器适配器&#xff0c;我们可任意给模板实例化不同的容器&#xff0c;然后就可以使用容器里的接口。 template<class T,class Containers> 我们…

轮播图添加删除

轮播图页面和对话框搭建 页面简单布局 <template><div id"banner"><el-space direction"vertical" :size"20" style"width: 100%"><h1>轮播图管理</h1><div style"text-align: right"&g…

【论文阅读】DQnet: Cross-Model Detail Querying for Camouflaged Object Detection

DQnet: Cross-Model Detail Querying for Camouflaged Object Detection DQnet&#xff1a;伪装目标检测中的跨模型细节查询 论文地址&#xff1a;https://arxiv.org/abs/2212.08296 这篇文章提出了一个交叉模型框架&#xff08;CNN-Transformer并行&#xff09;来检测伪装目…

Cocoapods 集成与初始化 - swift

基于新的 swift 工程集成 cocoapods,操作过程与 object-c 类似, 如下操作基于已成功安装 cocoapods 的基础之上; 首先,终端访问到工程根目录下 cd xxx工程文件夹路径xxx 其次,创建 Podfile 文件 vim Podfile 再其次,创建成功后工程根目录下会得到一个 Podfile 文件,通过终…

MySQL事务机制、导入导出、数据表设计案例(六)

目录 一、数据库事务机制1.1 undo和redo日志1.2 开启事务、提交事务、回滚事务1.3 事务的ACID属性1.4 事务的并发性1.4.1 业务案例1&#xff1a;抢车票1.4.2 业务案例2&#xff1a;转账1.4.3 业务案例3 电商涨价1.4.4 事务的序列化 二、数据导出与导入2.1 SQL文件的导出与导入2…

【操作教程】在EasyCVR平台实现播放MP4视频的两种方法

目前EasyCVR平台可支持国标GB28181、RTSP/Onvif、RTMP、海康Ehome、SDK等方式接入&#xff0c;这些接入方式主要是针对设备或视频流的接入。在有些项目现场也会遇到播放MP4视频文件的需求&#xff0c;今天我们来介绍下&#xff0c;如何在EasyCVR平台实现MP4视频文件的播放&…

vue-element-template管理模板(一)

模板下载 选择分支&#xff1a;https://github.com/PanJiaChen/vue-admin-template/tree/permission-control 端口修改、关闭Eslint 修改vue.config.js文件&#xff08;用放大镜搜索“9528”定位文件&#xff09; const port 9528 lintOnSave: false国际化设置 import lo…

PHP8知识详解:PHP是什么?

PHP是什么&#xff1f; 杨泽业从下面几点为你讲清楚什么是PHP。 1、PHP最开始是Personal Home Page&#xff08;个人主页&#xff09;的缩写&#xff0c;已经正式更名为 “PHP: Hypertext Preprocessor”&#xff0c;超文本预处理器的字母缩写。 2、PHP是一种被广泛应用的、…

改进的减法优化器算法优化BP神经网络---回归+分类两种案例

今天采用前一阵改进最为成功的智能优化算法---融合黄金正弦的减法优化器算法(GSABO)优化BP神经网络。该算法不仅是2023年较新的算法&#xff0c;而且改进后的收敛速度和寻优精度都是极佳&#xff01;点击链接跳转GSABO算法&#xff1a;融合黄金正弦&#xff0c;十种混沌映射&am…

【在英伟达nvidia的jetson-orin-nx-工控机入门了解-自我学习-资料记录-熟悉了解】

【在英伟达nvidia的jetson-orin-nx-工控机入门了解-自我学习-资料记录-熟悉了解】 1、概述2、实验环境3-1初次接触工控机版本-真的好多-新手一脸懵逼3-2 啥是载板和核心板3-3 查看资源资料3-4 了解外设资源3-5 查看博客论坛3-6 底层配置pinmux3-7 Linux驱动开发3-8 AI相关3-8 j…

【基于CentOS 7 的NFS服务】

目录 一、概述 二、应用场景 三、安装 四、启动服务 五、目录结构 1.nfs的主配置文件 2.存储配置文件 六、命令解析 1.共享存储管理命令 2.共享目录查看 七、配置 八、客户端访问 1.查看nfs服务器的共享目录 2.挂载 九、实际案例 一、概述 network filesystemt…