#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位并没有什么实际意义,这
中改法是有用的。
转载于:https://blog.51cto.com/helloleex/1705722