题目来源:在《C和指针》这本书中的第5章第三题。
/*
** Function : unsigned int reverse_bits(unsigned int value);
** Date : 2013-8-8
** Author : ZZZ
** 将value的二进制模式逆序结果输出.
** 例如如: 32位机上, 输入 25, 返回 2 550 136 832;
** 25 = 0000 0000 0000 0000 0000 0000 0001 1001(B);
** 2 550 136 832 = 1001 1000 0000 0000 0000 0000 0000 0000(B);
** 代码不依赖机器上整型的长度.
*/
unsigned int reverse_bits(unsigned int value)
{
// 初始化,如果个位数为1,一次计算后为1;
// 如果个位数为0,在第二次计算时应该是乘2,故初始值为1.
unsigned int rslt = (value & 0);
// 标志移位的次数
unsigned int flag = 1;
while(flag != 0)
{
if((value & 1) == 1)
{
rslt = (rslt << 1) + 1;
}
else
{
rslt <<= 1;
}
value >>= 1;
flag <<= 1;
}
return rslt;
}