首页 > 其他分享 >【C语言】写一个宏,可以将一个整数的二进制位的奇数位和偶数位交换

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

时间:2024-06-10 16:29:35浏览次数:29  
标签:00000000000000000000000000000000 奇数 二进制位 步骤 交换 C语言 偶数 00000000000000000000000000

思路:10的二进制是00000000000000000000000000001010,然后交换奇数位和偶数位那么就是第一位和第二位交换,第三位和第四位交换,以此类推

解题步骤:

(1)将00000000000000000000000000001010的奇数位保留,偶数位变为0

则变成00000000000000000000000000000000

(2)将00000000000000000000000000001010的偶数位保留,奇数位变为0

则变成00000000000000000000000000001010

(3)则将(1)步骤得到的00000000000000000000000000000000左移一位,此时因为奇数被保留,所以我们左移一位那么奇数位就变成偶数位,得到00000000000000000000000000000000

(4)将(2)步骤得到的00000000000000000000000000001010右移一位,此时偶数位变成奇数位,得到00000000000000000000000000000101

(5)将(3)和(4)得到的00000000000000000000000000000000和00000000000000000000000000000101相加得00000000000000000000000000000101则为10交换后的结果

我们用上面的解题步骤再举一个例子:11 二进制:1011 交换完后变成0111

根据(1)得0001

根据(2)得1010

根据(3)得0010

根据(4)得0101

根据(5)0010+0101=0111

现在就是怎么实现了

那么(1)的奇数位保留,偶数位变为0只需要按位与(&)上01010101010101010101010101010101转成16进制就是:0x55555555

步骤(2)的偶数位保留,奇数位变为0只需要按位与(&)上10101010101010101010101010101010转成16进制就是:0xaaaaaaaa

代码如下:

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

在这里插入图片描述

标签:00000000000000000000000000000000,奇数,二进制位,步骤,交换,C语言,偶数,00000000000000000000000000
From: https://blog.csdn.net/m0_46676283/article/details/139577148

相关文章

  • C语言 & 图形化界面方式连接MySQL【C/C++】【图形化界面组件分享】
      博客主页:花果山~程序猿-CSDN博客文章分栏:MySQL之旅_花果山~程序猿的博客-CSDN博客关注我一起学习,一起进步,一起探索编程的无限可能吧!让我们一起努力,一起成长!目录一.配置开发环境 二,接口介绍1.mysql_init2.mysql_real_connect3.mysql_query4.对select结果分析......
  • 线程池原理及c语言实现线程池
    线程池线程池是一种多线程处理机制,其主要目的是提高系统资源利用率、降低系统资源消耗,并通过控制并发线程数量来优化性能。以下是关于线程池的详细解释:定义:线程池是一种线程使用模式,它维护着一组线程,这些线程等待监督管理者分配可并发执行的任务。通过将任务添加到队列中,并......
  • 【C语言】宏offsetof的模拟实现(计算结构体中某变量相对于首地址的偏移)
    首先我们应该特别留意:offsetof是一个宏,并非是一个函数!宏offsetof的介绍:参数:第一个是结构体类型名称,第二个是结构体成员名返回类型:size_t无符号整形引用的头文件:<stddef.h>offsetof的使用举列:#include<stddef.h>structStu//注释为相对于起始位置的偏移量{......
  • C语言——使用函数创建动态内存
    一、堆和栈的区别1)栈(Stack):栈是一种自动分配和释放内存的数据结构,存储函数的参数值、局部变量的值等。栈的特点是后进先出,即最后进入的数据最先出来,类似于我们堆盘子一样。栈的大小和生命周期是由系统自动管理的,不需要程序员手动释放。2)堆(Heap):堆是由程序员手动分配和释......
  • 初始C语言——结构化算法的结构
    C语言程序是一种程序化程序,也就是说,可以用C语言程序来解决的问题,都可以分解成相互独立的几个部分,每个部分都可以通过简单的语句或结构来实现。一般而言,对于结构化的程序,一个完整的算法可以用“顺序结构”,“分支结构”和“循环结构”的有机组合来表示。(一)----------顺序结构......
  • 实验6 C语言结构体、枚举应用编程
    4.实验任务41#include<stdio.h>2#defineN1034typedefstruct{5charisbn[20];6charname[80];7charauthor[80];8doublesales_price;9intsales_count;10}Book;1112voidoutput(Bookx[],int);13voidsort(Bo......
  • 【C语言从入门到入土】第四章数组
    第四章数组———————-数组的引入你所有的压力,都是因为你太想要了,你所有的痛苦,都是因为你太较真了。有些事不能尽你意,就是在提醒你改转弯了。如果事事都如意,那就不叫生活了,珍惜所有不期而遇,看淡所有的不辞而别。文章目录第四章数组4.1如何定义一个数组1.相同......
  • c语言基础篇A
    A1.程序和程序设计语言程序程序=算法+数据结构+程序设计方法+语言工具和环境数据结构:数据的类型和数据的组织形式算法:对数据操作的方法和步骤程序设计语言的种类第一代语言:机器语言第二代语言:汇编语言第三代语言:高级语言——面向过程语言——面向对象语言第四代语言:非......
  • c语言基础篇B
    B1.数据的输入与输出c语言本身不提供输入输出语句,输入和输出操作是由c函数库中的函数来实现的在使用系统库函数时,要用预编译命令“#include”将有关的“头文件”包括到用户源文件中include"stdio.h"或者includeB2.printf()函数(格式输出函数)函数作用:输出若干个任意类型的数......
  • 零基础非科班也能掌握的C语言知识19 动态内存管理
    动态内存管理1.为什么要有动态内存分配2.malloc和free2.1malloc2.2free3.calloc和realloc3.1calloc3.2realloc4.常见的动态内存的错误4.1对NULL指针的解引用操作4.2对动态开辟空间的越界访问4.3对非动态内存开辟的空间free4.4使用free释放⼀块动态开辟内存的⼀部分4......