/*
* 翻转一个整数的二进制数
*/
#include <stdint.h>
#include <stdio.h>
uint32_t reverse_bits(uint32_t n) {
// 交换相邻位
n = ((n & 0xAAAAAAAA) >> 1) | ((n & 0x55555555) << 1);
// 交换每2位
n = ((n & 0xCCCCCCCC) >> 2) | ((n & 0x33333333) << 2);
// 交换每4位
n = ((n & 0xF0F0F0F0) >> 4) | ((n & 0x0F0F0F0F) << 4);
// 交换每8位
n = ((n & 0xFF00FF00) >> 8) | ((n & 0x00FF00FF) << 8);
// 交换每16位
n = (n >> 16) | (n << 16);
return n;
}
int main() {
uint32_t num = 0x1; // 示例整数
uint32_t reversed_num = reverse_bits(num);
printf("Original: %08X\n", num);
printf("Reversed: %08X\n", reversed_num);
return 0;
}
结果