1.
#include <stdio.h>
#include <math.h>
unsigned int reverse_bit(unsigned int value)
{
int i = 0;
unsigned int sum = 0;
for (i = 0; i < 32; i++)
{
sum += ((value >> i) & 1)*pow(2, 31 - i);
//首先i=0时,按位与1,取出最后一位,乘2的31次方,就成了最高位
//依次循环,然后相加,就得到翻转后的值
}
return sum;
}
int main()
{
int num = 25;
printf("%u\n", reverse_bit(num));
return 0;
}
运行之后发现程序报了个警告,是由于pow函数是double类型的,从“double”转换到“unsigned int”,可能丢失数据。
2.
#include <stdio.h>
#include <math.h>
unsigned int reverse_bit(unsigned int value)
{
int ret = 0;
int i = 0;
for (i = 0; i < 32; i++)
{
ret <<= 1;//左移1位,保存前一位
int bit = (value >> i) & 1;//按位与1,依次取出最后一位
ret |= bit;//最后一位给ret
}
return ret;
}
int main()
{
int num = 25;
printf("%u\n", reverse_bit(num));
return 0;
}