交换奇偶位

题目描述:

        写一个宏,可以将一个整数的二进制位的奇数位和偶数位交换。

题目分析:

     相信大家都可以想到位运算如:按位异或,按位取反以及<<和>>等操作符,可是想到这些又能怎么样?还是没有思路。别慌,咱们要有有已知推未知的能力以及实在想不到可以举个例子,咱们现以1为例,众所周知,数字在系统中存储以32个比特位对吧,那1不就是以以下形式存储:

00000000 00000000 00000000 0000001

        那奇数位与偶数位就换就是2了,那不就是扩大了二倍,然后你又进行验证,又搬出了5:

0000000 0000000 0000000 00000101

        交换了奇数位与偶数位,果然扩大了二倍 ,然后你大喜过望,正准备书写代码,仅存的理智告诉你:现在还不是时候,这是不死心的你又拿出来13:

00000000 00000000 00000000 00001101

        一交换,本以为会和之前一样,看到结果后却又饱受打击,为什么是14,这是为什么?为什么?

        就在你苦恼之时,突然间灵光一闪,能不能把先确定这个数的奇偶位,然后运用位运算符得出答案。

    -----------------------------------------TWO THOUSAND LATE-----------------------------------------------------

        经过你潜心研究,终于得出了一份足以震惊世界的答案,于是你迫不及待地把答案公布出去,在万众瞩目的目光下,你清了清嗓子,缓缓说道:

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

※这个宏只能完成32位以内的整形,要想完成64位的,那就将5和a的数量翻倍即可。

         你这一份发言虽使他们大受震撼,但他们说你口说无凭,随后,你这他们漫眼疑惑的目光中,在编译器敲下了能叫自己高光的代码:

        代码实现:

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

        最后,你用你这神一般的代码赢得了阵阵掌声,赢了一切,从此出任CEO,迎娶白富美。在你成亲之日,觉得日光那么的耀眼,突然,你发现你这床上,你这开眼四望心茫然,不由得悲从中来,不可断绝。但你有察觉脑海中多了一段代码,觉得至少还有所收获,重新捡起了生活的信心!(此文纯属杜撰,为了帮助大家理解,不要当真!!!)

        完!

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

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

相关文章

ASC+Base64加密算法 根据用户id生成秘钥

需要是要根据用户的id生成密钥 通过密钥生成免登录链接 实现用户根据链接直接访问系统 标准Base64编码包含特殊字符,会被转义 从而登录失败要使生成的密文不包含特殊字符&#xff0c;您可以使用Base64URL编码代替标准的Base64编码。Base64URL编码使用-和_替换了标准Base64编码…

Python从原Excel表中抽出数据存入同一文件的新的Sheet(附源码)

python读取excel数据。Python在从原Excel表中抽出数据并存储到同一文件的新的Sheet中的功能&#xff0c;充分展示了其在数据处理和自动化操作方面的强大能力。这一功能不仅简化了数据迁移的过程&#xff0c;还提高了数据处理的效率&#xff0c;为数据分析和管理工作带来了极大的…

图像识别应用

一、图像识别应用 图像识别&#xff0c;是利用机器视觉对图像进行处理、分析和理解&#xff0c;以识别各种不同模式的目标和对象。图像识别在机器视觉工业领域中最典型的应用就是二维码的识别了&#xff0c;二维码就是我们平时常见的条形码中最为普遍的一种。将大量的数据信息存…

Nginx 配置 WebSocket 代理

Nginx 配置 WebSocket 代理 文章目录 Nginx 配置 WebSocket 代理官方文档代理样例 Linux 查看安装文件命令手册Nginx 日志配置方案成功解决问题--使用 Nginx 代理 WebSocket可能出现的问题 Nginx 官方文档网址 nginx documentation ... http:{...server{...# WebSocket代理loc…

诊断慢SQL根源

诊断慢SQL的根源通常涉及一系列步骤和方法&#xff0c;包括但不限于以下几个方面&#xff1a; 1. **收集慢SQL日志**&#xff1a; - 设置数据库系统的慢查询日志阈值&#xff08;如MySQL的long_query_time&#xff09;&#xff0c;记录执行时间超过指定阈值的SQL语句。 …

3.31学习总结

算法 解题思路 使用dfs,对蛋糕每层可能的高度和半径进行穷举.通过观察我们可以知道第一层的圆面积是它上面所有蛋糕层的圆面积之和,所以我们只要去求每层的侧面积就行了. 因为题目要求Ri > Ri1且Hi > Hi1,所以我们可以求出每层的最小体积和侧面积,用两个数组分别储存起来…

C语言实现猜数字游戏(有提示,限制次数版)

这次的猜数字游戏我添加了新的功能&#xff1a;为玩家添加了提示&#xff0c;以及输入数字的限制次数。 首先&#xff0c;我们的猜数字游戏需要一个菜单&#xff0c;来让玩家可以选择玩游戏还是退出游戏&#xff0c;所以我们需要开始就打印一个菜单&#xff1a; int main() {…

Mac air 个人免费版VMWare Fusion安装及配置教程

Mac air 安装免费版VMWare Fusion教程及问题解决 1、下载VMWare Fusion2、下载wins镜像文件3、开始配置4、出现的问题及解决方法4.1 如何跳过启动时的网络连接4.2 启动后&#xff0c;无法连接网络怎么办4.3 怎么实现将文件拖拽到虚拟机中 当你手上是一台Mac电脑&#xff0c;却需…

el-upload上传图片给SpringBoot后端

需求 我的需求是&#xff0c;将上传文件的el-upload放到一个el-form里面&#xff0c;点击保存才提交&#xff0c;所以不能直接用action的方式&#xff0c;下面采用自定义上传的方式来完成Vue前端 主要是使用editForm.imgList来保存图片的信息&#xff0c;注意这里是一个对象&am…

VS Code常用前端开发插件和基础配置

VS Code插件安装 VS Code提供了非常丰富的插件功能&#xff0c;根据你的需要&#xff0c;安装对应的插件可以大大提高开发效率。 完成前端开发&#xff0c;常见插件介绍&#xff1a; 1、Chinese (Simplified) Language Pack 适用于 VS Code 的中文&#xff08;简体&#xff…

【原创】基于分位数回归的卷积长短期结合注意力机制的神经网络(CNN-QRLSTM-Attention)回归预测的MATLAB实现

基于分位数回归的卷积长短期结合注意力机制的神经网络&#xff08;CNN-QRLSTM-Attention&#xff09;是一种用于时间序列数据预测的深度学习模型。该模型结合了卷积神经网络&#xff08;CNN&#xff09;、长短期记忆网络&#xff08;LSTM&#xff09;和注意力机制&#xff08;A…

小白用Windows(ssh)连接使用 ubuntu(虚拟机)

安装ssh sudo apt install openssh-server 添加用户、密码 sudo useradd fly sudo passwd fly sudo adduser fly sudo 免密登入 [windows 生成密钥&#xff1a;ssh-keygen -t rsa -b 4096 cat ~/.ssh/id_rsa.pub | ssh fly192.168.23.133 "mkdir -p ~/.ssh…

C# 文件

FileStream 类FileModeFileAccessFileShare StreamReader 类和StreamWriter类StreamReader 类StreamWriter类关于using FileStream 类 FileStream <object_name> new FileStream( <file_name>, <FileMode Enumerator>, <FileAccess Enumerator>, <…

数据治理-平台详细措施

这里讲平台治理的具体措施&#xff0c;并不是从具体架构来说&#xff0c;而是从详细方法。 名词定义 1.待治理成本 2.浪费量&#xff1a;可以优化计算或者存储 3.累计浪费量&#xff1a;发现时距离今天数*当日浪费量 4.节省成本&#xff1a;完成治理成本 5.白名单管理成本 治理…

C++ 数组 结构编程题

一 求100以内的所有素数 /* * 需要标记2~100 之间的数是否处理 * 用数组&#xff0c;初始为0 表示都是素数&#xff0c;如果 判断为合数则置为1过用 */ #include<stdio.h> #include<math.h> int main() {const int n 100;int isPrim[n 1] { 0 };int i, j;for (…

MAC的Safari浏览器没有声音解决办法

有一段时间没打开电脑&#xff0c;也不知道是系统自动更新或是什么缘故&#xff0c;所有浏览器都无法正常发声。 现象如下&#xff1a; 首先&#xff0c;Safari浏览器无法自动播放声音&#xff0c;下载的360浏览器现象一致&#xff0c;但是播放其他音乐播放软件和视频软件都正…

【开发工具】Ubuntu复制CSDN代码多余符号的去除

在Ubuntu中使用CSDN复制的代码时&#xff0c;可能会出现\u200的符号&#xff0c;这个符号会影响代码的编译和运行&#xff0c;因此需要找到一种快速删除这种符号的方法。 通过搜索找到了一种替换为空的删除方式&#xff0c;笔者编写了一个适用于Rust的shell脚本&#xff0c;需要…

JavaScript(二)---【js数组、js对象、this指针】

零.前言 JavaScript(一)---【js的两种导入方式、全局作用域、函数作用域、块作用域】-CSDN博客 一.js数组 在js中也有数组的概念&#xff0c;数组使用“[]”定义&#xff0c;其中数组中还可以嵌套数组从而达到多层数组的作用。 访问数组中的某个元素&#xff0c;我们可以直…

pymysql使用记录

最近由于需要来学习一下pymysql。 先来认识一下pymysql&#xff1a; PyMySQL 是 Python 中一个用于连接 MySQL 数据库的库。它允许 Python 程序通过简单的 API 调用来连接、操作和管理 MySQL 数据库。PyMySQL 是在 Python 中使用纯 Python 编写的&#xff0c;因此它可以在几…

一些常见的MySQL问题和答案

什么是MySQL&#xff1f;MySQL的存储引擎有哪些&#xff1f;它们有什么区别&#xff1f; MySQL是一个开源的关系型数据库管理系统&#xff0c;用于存储和管理大量结构化数据。 MySQL的存储引擎包括InnoDB、MyISAM、Memory等。它们在事务支持、并发性能、数据完整性等方面有所不…