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

0xaaaaaaaa...等是什么?-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/Jason_from_China/article/details/137179252

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#define SWAP(num) (((num & 0xAAAAAAAA) >> 1) | ((num & 0x55555555) << 1))
//这里是左右缩进1 也就是原来的奇数占据偶数位置,偶数占据奇数位置
//然后再进行或因为,本质上是没有变化的,就是得出的结果,因为
//0xaaaaaaaa = 10101010101010101010101010101010 (偶数位为1,奇数位为0)
//0x55555555 = 1010101010101010101010101010101 (偶数位为0,奇数位为1)
//
// (num & 0xAAAAAAAA) >> 1:将选择的偶数位右移一位,这样它们就占据了奇数位的位置。
//(num & 0x55555555) << 1:将选择的奇数位左移一位,这样它们就占据了偶数位的位置
//也就是 (num & 0xAAAAAAAA) >> 1实际得到的是奇数位
//也就是(num & 0x55555555) << 1实际得到的是偶数位
//
// 但是在此之前,奇数位计算&的时候->得到的偶数位
// 00000000 00000000 00000000 10101110
// &
// 10101010 10101010 10101010 10101010
// =此时正好得出偶数位的数值
// 00000000 00000000 00000000 00101010
// 
// 但是在此之前,偶数位计算&的时候->得到的奇数位
// 00000000 00000000 00000000 10101110
// &
// 01010101 01010101 01010101 01010101
// =此时正好得出奇数位的数值
// 00000000 00000000 00000000 00000100
// 
// =最后偶数位和奇数位的数值进行|之后,得到的是整个的数值
//void my_two(int n)//转化成二进制,对比使用函数
{for (int i = 31; i >= 0; i--){int j = ((n >> i) & 1);printf("%d ", j);}printf("\n");
}
int main()
{int num = -174;my_two(num);printf("计算之前的数字=%d \n计算之后的数字=%d ", num, SWAP(num));return 0;
}
// 00000000 00000000 00000000 10101110
// &
// 10101010 10101010 10101010 10101010// 这个数的二进制表示中,所有的偶数位都是1,所有的奇数位都是0。
// 
// |                                 // 所以这两个或之后其实就等于哦就等于没有对结果产生影响
// 
// 00000000 00000000 00000000 10101110
// &
// 01010101 01010101 01010101 01010101//- 这个数的二进制表示中,所有的奇数位都是1,所有的偶数位都是0。
// 
// =
// 00000000 00000000 00000000 01011101//93
// 
// 
//‘10 10 11 10’, ‘01 01 11 01’, 93)
// 
// 
// 
//0xaaaaaaaa = 10101010101010101010101010101010 (偶数位为1,奇数位为0)
//
//0x55555555 = 1010101010101010101010101010101 (偶数位为0,奇数位为1)
//
//0x33333333 = 110011001100110011001100110011 (1和0每隔两位交替出现)
//
//0xcccccccc = 11001100110011001100110011001100(0和1每隔两位交替出现)
//
//0x0f0f0f0f = 00001111000011110000111100001111 (1和0每隔四位交替出现)
//
//0xf0f0f0f0 = 11110000111100001111000011110000 (0和1每隔四位交替出现

所以主要函数也就是 

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#define SWAP(num) (((num & 0xAAAAAAAA) >> 1) | ((num & 0x55555555) << 1))
int main()
{int num = -174;my_two(num);printf("计算之前的数字=%d \n计算之后的数字=%d ", num, SWAP(num));return 0;
}

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

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

相关文章

【C++】C到C++的入门知识

目录 1、C关键字 2、命名空间 2.1 命名空间的定义 2.2 命名空间的使用 2.2.1 加命名空间名称及作用域限定符 2.2.2 使用using将命名空间中某个成员引入 2.2.3 使用using namespace 命名空间名称引入 3、C输入&输出 4、缺省参数 4.1 缺省参数的概念 4.2 缺省参数的…

深入理解zookeeper

如果是zookeeper的初学者&#xff0c;可以看&#xff1a; zookeeper快速入门&#xff08;合集&#xff09;-CSDN博客 如果想要深入理解zookeeper&#xff0c;并在面试中取得更好的表现&#xff0c;可以看下面的文章&#xff0c;都是偏面试向的角度写的。 三分钟明白zookeeper…

名字真的会影响我们的职业吗?

名字是我们身份的一部分&#xff0c;人们往往喜欢将一个人名字同一种具体的职业联系在一起&#xff0c;而如果这个人名字看上去更适合一项工作&#xff0c;那么他&#xff08;她&#xff09;就有更多的机会得到这份工作。因此&#xff0c;我们在给福主取名改名时也会与职业特点…

10.Python异常处理

为增强程序的健壮性&#xff0c;我们也需要考虑异常处理方面的内容。例如 &#xff0c;在读取文件时需要考虑文件不存在、文件格式不正确等异常情况。这 就是本章要介绍的异常处理。 1 第一个异常——除零异常 在数学中&#xff0c;任何整数都不能除以0&#xff0c;如果在计算…

PCL 计算点与圆的距离(3D)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 3D中的圆可以有圆心、半径以及法线来进行表示,如下图所示: 这里我们假设: Δ = P − C \Delta=P-C Δ

Wasm初上手

总之也是为了扩宽技术面吧。。。我也不知道为什么就想试试了&#xff0c;就酱。 参考阅读&#xff1a;极客时间《WebAssembly入门课》 安装wasm的编译器Emscripten。Emscripten 是一个“源到源”语言编译器工具集&#xff0c;这个工具集可以将 C/C 代码编译成对应 JavaScript 代…

【PostgreSQL】- 1.4 PostgreSQL 业务规划(创建 Schema)

业务规划与创建 Schemas 如果实际场景&#xff0c;有业务A、业务B、业务C&#xff0c;推荐的方式是在同一个数据库中为每个业务创建不同的 schema。然后&#xff0c;你可以为每个业务创建不同的账户&#xff0c;并赋予这些账户对应业务的 schema 权限。这种方式的好处是&#…

CSS使用clip-path实现元素动画

前言&#xff1a; 在日常开发当中&#xff0c;如果想要开发多边形&#xff0c;一般都需要多个盒子或者伪元素的帮助&#xff0c;有没有一直办法能只使用一个盒子实现呢&#xff1f; 有的&#xff1a;css裁剪 目录 前言&#xff1a; clip-path到底是什么&#xff1f; clip-pa…

【御控物联】 JavaScript JSON结构转换(4):对象To对象——规则属性重组

文章目录 一、JSON结构转换是什么&#xff1f;二、术语解释三、案例之《JSON对象 To JSON对象》四、代码实现五、在线转换工具六、技术资料 一、JSON结构转换是什么&#xff1f; JSON结构转换指的是将一个JSON对象或JSON数组按照一定规则进行重组、筛选、映射或转换&#xff0…

赋值语句还能当判断条件?涨芝士了!

赋值和条件看似是C语言中毫不相关的两个概念&#xff0c;虽然实际过程中我猜测不会有太多这种不太符合常理的情况出现&#xff0c;但是现在在学习的过程中&#xff0c;为了出题而出题总是会整出一些花活出来.....这很难不让人联想起高中时一些大佬为了彰显自己的数学天赋而自己…

C++类基础7——移动构造函数,移动赋值运算符

右值引用只不过是一种新的C语法&#xff0c;真正理解起来有难度的是基于右值引用引申出的2种C编程技巧&#xff0c;分别为移动语义和完美转发。 左值、右值、将亡值&#xff1a; 概念&#xff1a; 从以下几个概念逐步深入&#xff1a; 表达式&#xff1a; 要说清“三值”&…

树莓派串口读取陀螺仪ky9250(mpu9250)数据

9轴姿态角度传感器&#xff0c;其中ky9250陀螺仪由于自带卡尔曼动态滤波算法方便用户使用。ky9250陀螺仪基本可以在各个平台上进行数据的读取&#xff08;如stm32\arduino\C#\Matlab\树莓\Unity3d\python\ROS\英飞凌\Nvidia jetson linux 等&#xff09; 1、树莓派和ky9250的接…

[报错解决]Type com.baomidou.mybatisplus.extension.ddl.IDdl not present

springboot整合mybatis-plus关键报错信息 在处理mybatis-plus时遇到的问题&#xff0c;现提供解决方案供参考&#xff1a; org.springframework.beans.factory.BeanCreationException: Error creating bean with name com.baomidou.mybatisplus.autoconfigure.MybatisPlusAu…

C++_第五周做题总结_类与对象

id:27 A.对象数组&#xff08;类和对象&#xff09; 题目描述 课堂上我们谈到类这个概念&#xff0c;比如第一题我们有学生类这个抽象的概念&#xff0c;成千上万个学生都具有同样的属性&#xff0c;但针对某个具体学生来说&#xff0c;他/她具有自己的鲜明个性&#xff0c;比…

AcWing刷题-区间合并

校门外的树 区间合并&#xff1a; from typing import List def merge(intervals: List[List[int]]) -> List[List[int]]:# 按照第一个元素从小到大进行排序intervals.sort(keylambda x: x[0])# 初始化一个新的数组new_list list()for i in intervals:# 把第一个数组元素添…

基于ssm旅游资源网站(java项目+文档+源码)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的旅游资源网站。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 旅游资源网站的主要使用者分为管理…

描述C语言中的进程和线程之间的区别

描述C语言中的进程和线程之间的区别 在C语言中&#xff0c;进程和线程是两个非常重要的概念&#xff0c;它们在操作系统中各自扮演着独特的角色。理解它们之间的区别对于编写高效、可维护的并发程序至关重要。下面将详细阐述进程和线程在C语言中的区别。 首先&#xff0c;我们…

机器学习每周挑战——旅游景点数据分析

数据的截图&#xff0c;数据的说明&#xff1a; # 字段 数据类型 # 城市 string # 名称 string # 星级 string # 评分 float # 价格 float # 销量 int # 省/市/区 string # 坐标 string # 简介 string # 是否免费 bool # 具体地址 string拿到数据…

【42 可视化大屏 | 某瓣电影Top250数据分析可视化大屏】

文章目录 &#x1f3f3;️‍&#x1f308; 1 普版大屏&#x1f3f3;️‍&#x1f308;2 Flask版大屏&#x1f3f3;️‍&#x1f308;3 FlaskMysql版大屏&#x1f3f3;️‍&#x1f308; 4. 可视化项目源码数据 大家好&#xff0c;我是 &#x1f449;【Python当打之年(点击跳转)…

渐变色x轴换行柱状图

// 系统上云率const optionBar {title: {text: 系统上云率,left: left,textStyle: {color: "#fff",fontSize: 14,fontWeight: 650,align: "center",},},color: [#32C5FF, #00F766, #EECB5F],grid: {top: 40,bottom: 0,},legend: { // 控制图例组件show: …