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

简介: 写一个宏,可以将一个整数的二进制位的奇数位和偶数位交换(C语言)

1.解题思路:

在思考如何解题之前我们要知道,二进制的每一位代表的数字相加为这个数的值,而二进制的数又可分为偶数位和奇数位,即偶数位和奇数位的和就为该数的值,首先利用按位与的思路得到一个整数的偶数位的值和奇数位的值,然后将奇数位的值左移1位,偶数位的值右移一位后相加就可得到交换后的值

#include<stdio.h>
#define Swap(n)   n=(((n&0x55555555)<<1)+((n&0xaaaaaaaa)>>1))
int main()
{
  int a = 10;
  Swap(a);
    printf("%d\n",a);
    Swap(a);
    printf("%d", a);
}
目录
相关文章
|
2天前
|
存储 C语言
【C语言刷题系列】求一个数组中两个元素a和b的和最接近整数m
【C语言刷题系列】求一个数组中两个元素a和b的和最接近整数m
|
2天前
|
C语言
【C语言刷题系列】交换整数的奇数位和偶数位
【C语言刷题系列】交换整数的奇数位和偶数位
|
2天前
|
安全 编译器 C语言
【C语言进阶篇】offsetof宏的介绍 及其实现
【C语言进阶篇】offsetof宏的介绍 及其实现
|
2天前
|
存储 C语言
【C语言进阶篇】整数在内存的存储——原码、反码、补码
【C语言进阶篇】整数在内存的存储——原码、反码、补码
|
2天前
|
编译器 程序员 C语言
【C语言进阶篇】assert宏 使用详解
【C语言进阶篇】assert宏 使用详解
|
2天前
|
C语言
【C语言刷题系列】计算整数的二进制位中1的个数 (三种方式)
【C语言刷题系列】计算整数的二进制位中1的个数 (三种方式)
|
2天前
|
C语言
【C语言刷题系列】交换两个变量的三种方式
【C语言刷题系列】交换两个变量的三种方式
|
2天前
|
C语言
【C语言刷题每日一题#牛客网BC6】输入三个整数,输出第二个整数
【C语言刷题每日一题#牛客网BC6】输入三个整数,输出第二个整数
|
2天前
|
C语言
【C语言刷题每日一题】一维数组的交换
【C语言刷题每日一题】一维数组的交换
|
2天前
|
C语言
【C语言刷题每日一题】——求1到100中包含数字9的整数的个数
【C语言刷题每日一题】——求1到100中包含数字9的整数的个数