题目描述:
unsigned int reverse_bits(unsigned int value);这个函数的返回值是把value的二进制位模式从左到右变换一下后的值。例如,在32位机器上,25这个值包含下列各个位:
00000000 00000000 00000000 00011001
函数的返回值应该是2 550 136 832,它的二进制位模式是:
测试:
结果:
unsigned int reverse_bits(unsigned int value);这个函数的返回值是把value的二进制位模式从左到右变换一下后的值。例如,在32位机器上,25这个值包含下列各个位:
00000000 00000000 00000000 00011001
函数的返回值应该是2 550 136 832,它的二进制位模式是:
10011000 00000000 00000000 00000000
方法一:
unsigned int reverse_bit(unsigned int value)
{
unsigned int result = 0;
int num = 0;
int bit = 0;
while (num <32)
{
bit = value & 1;//取出最低位
value >>= 1;//右移一位,
result += bit<<(31-num); //32位( 0 到 31)
num++;
}
return result;
}
方法二:
unsigned int reverse_bits(unsigned int value)
{
unsigned int answer= 0;
unsigned int i;
/*把一个unsigned int 数字1一直左移,直到它变成全0的时候,也就得到了该机器内unsigned int的长度*/
for (i = 1; i != 0; i <<= 1) //参考《C和指针》,太妙了
{
answer <<= 1;
if (value & 1) { answer |= 1; }
value >>= 1;
}
return answer;
}
测试:
#include<stdio.h>
int main()
{
// unsigned int val = 25;
printf("反转后:%u",reverse_bit(25));
return 0;
结果: