实现宏:可以将一个整数的二进制位的奇数位和偶数位交换(详解)
前言:内容包括:宏的实现,实现思路,理解图示
以5为例:
5的二进制位是: 00000000000000000000000000000101
奇偶二进制位交换后:00000000000000000000000000001010
5变成了10
宏的实现:
#include<stdio.h>#define SWAP_BIT(x) (x = (((x & 0x55555555)<<1)+ ((x & 0xaaaaaaaa)>>1)))
int main()
{int n = 0;scanf("%d", &n);SWAP_BIT(n);printf("%d", n);return 0;
}
实现思路:
得到所有奇数位:此数 & 0x55555555
得到所有偶数位:此数 & 0xaaaaaaaa
2 将得到的奇数位向左移动一位
将得到的偶数位向右移动一位
3 现在的奇数位+现在的偶数位 = 一个数奇偶二进制交换后的结果
一个数的奇数位+偶数位 = 一个数:
5的二进制:(只取最后的4个比特位)0101