写一个宏,可以将一个整数的二进制位的奇数位和偶数位交换(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);
}
目录
相关文章
|
20天前
|
C语言
【C语言】全局搜索变量却找不到定义?原来是因为宏!
使用条件编译和 `extern` 来管理全局变量的定义和声明是一种有效的技术,但应谨慎使用。在可能的情况下,应该优先考虑使用局部变量、函数参数和返回值、静态变量或者更高级的封装技术(如结构体和类)来减少全局变量的使用。
31 5
|
20天前
|
存储 网络协议 算法
【C语言】进制转换无难事:二进制、十进制、八进制与十六进制的全解析与实例
进制转换是计算机编程中常见的操作。在C语言中,了解如何在不同进制之间转换数据对于处理和显示数据非常重要。本文将详细介绍如何在二进制、十进制、八进制和十六进制之间进行转换。
29 5
|
6月前
|
C语言
【C语言刷题每日一题#牛客网BC6】输入三个整数,输出第二个整数
【C语言刷题每日一题#牛客网BC6】输入三个整数,输出第二个整数
|
4月前
|
编译器 程序员 C语言
C语言 宏
C语言 宏
43 5
|
5月前
|
Linux C语言
C语言宏IS_REACHABLE
C语言宏IS_REACHABLE
46 1
|
6月前
|
C语言
C语言:从键盘读入三个整数,按从大到小输出
C语言:从键盘读入三个整数,按从大到小输出
|
6月前
|
C语言
【C语言刷题每日一题】一维数组的交换
【C语言刷题每日一题】一维数组的交换
|
6月前
|
存储 C语言
【C语言刷题系列】求一个数组中两个元素a和b的和最接近整数m
【C语言刷题系列】求一个数组中两个元素a和b的和最接近整数m
|
6月前
|
C语言
【C语言刷题每日一题】——求1到100中包含数字9的整数的个数
【C语言刷题每日一题】——求1到100中包含数字9的整数的个数
|
6月前
|
C语言
【C语言刷题系列】交换整数的奇数位和偶数位
【C语言刷题系列】交换整数的奇数位和偶数位