您的位置:首页 > 其它

倒序输出一个无符号二进制数的所有位

2015-10-24 09:50 246 查看
#include <stdio.h>
#include <math.h>
uint reverse_bit(uint num)
{
uint ret = 0;
int i = 0;
for (i = 0; i < 32; i++)
{
ret += ((num >> i) & 1)*pow(2, 31 - i);
}
return ret;
}
int main()
{
printf("%u\n", reverse_bit(4026531840));
getchar();
return 0;
}
要将一个数的所有二进制位翻转过来的话要操作32次,所以要用一个for循环,并且循环32次,所以以
上代码的代码并没有什么不妥,但是细心一分析的话,你就会发现当i循环到31次的时候,num的最低
位已经到了最高位,当循环到32次时,程序结果必然发生错误,所以我们把for循环体改为
for (i = 0; i < 32; i++)
{
ret <<= 1;
ret |= ((num >> i) & 1);
}

如果程序改为这样就会好一些,程序消耗掉了i=0这一次循环,因为想左移0位并没有什么实际意义,这
中改法是有用的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: