#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位并没有什么实际意义,这

中改法是有用的。