- 题目要求
- 思路讲解
- 提取偶数位
- 提取奇数位
- 偶数位右移一位
- 奇数位左移一位
- 二者相加
- 代码示例
交换奇偶位
写一个宏,可以将一个整数的二进制位的奇数位和偶数位交换。
思路讲解假设我们现在有这么一个二进制数
0是偶数位,那么可以看出红色的就是偶数位
31是奇数位,那么绿色的就是奇数位
我们先把偶数位的提取出来,然后再把红色的提取出来。
然后偶数位右移一位,奇数位左移一位,得出来得两个二进制数相加即使我们所要交换得结果
提取偶数位 提取奇数位 偶数位右移一位 奇数位左移一位 二者相加 代码示例#define _CRT_SECURE_NO_WARNINGS 1 #define SWAP_BIT(n) (n=((n&0x55555555)<<1)+((n&0xaaaaaaaa)>>1)) #includeint main() { int num = 0; scanf("%d", &num); int ret = SWAP_BIT(num); printf("%d ", ret); return 0; }



