// 位逆序算法, 可延伸至任意位
#include <stdio.h>
// 采用分治算法
unsigned int bitrev(unsigned int a)
{
a = ((a >> 16) & 0x0000FFFF) | ((a << 16) & 0xFFFF0000); // 交换 16 位子区间数据
a = ((a >> 8) & 0x00FF00FF) | ((a << 8) & 0xFF00FF00); // 交换 8 位子区间数据
a = ((a >> 4) & 0x0F0F0F0F) | ((a << 4) & 0xF0F0F0F0); // 交换 4 位子区间数据
a = ((a >> 2) & 0x33333333) | ((a << 2) & 0xCCCCCCCC); // 交换 2 位子区间数据
a = ((a >> 1) & 0x55555555) | ((a << 1) & 0xAAAAAAAA); // 交换 1 位子区间数据
return a;
}
// 主函数
int main (void)
{
unsigned int num;
puts("please input a unsigned number:");
scanf("%X", &num);
printf("%X\n%X", num, bitrev(num));
return 0;
}
位逆序算法
最新推荐文章于 2023-05-15 00:52:19 发布