✅博客主页:爆打维c-CSDN博客 🐾
🔹分享c语言知识及代码
以下是一个用于交换整数二进制位的宏:
#define SWAP_BITS(num) (((num) & 0xAAAAAAAA) >> 1) | (((num) & 0x55555555) << 1)
这个宏利用了二进制掩码来表示整数的奇数位和偶数位。
0xAAAAAAAA
对应二进制10101010101010101010101010101010
,用于提取奇数位;
0x55555555
对应二进制01010101010101010101010101010101
,用于提取偶数位。
宏的工作原理是,首先用 0xAAAAAAAA
取出 num
的奇数位,并将结果右移 1 位;然后用 0x55555555
取出 num
的偶数位,并将结果左移 1 位;最后,使用逻辑或运算符将两个结果合并。
以下是一个示例程序,演示了宏的用法:
#include <stdio.h>
#define SWAP_BITS(num) (((num) & 0xAAAAAAAA) >> 1) | (((num) & 0x55555555) << 1)
int main() {
int num = 0b10101010; // 输入的整数
printf("原始二进制位:%08b\n", num);
num = SWAP_BITS(num);
printf("交换后二进制位:%08b\n", num);
return 0;
}
在上面的示例程序中,我们将整数 0b10101010
的二进制位进行交换,输出结果如下:
原始二进制位:10101010
交换后二进制位:01010101
可以看到,原始的二进制位 10101010
经过宏的处理后,奇偶位发生了交换,变成了01010101
。