题目描述:
1.编写函数:
unsigned int reverse_bit(unsigned int value);
这个函数的返回 值value的二进制位模式从左到右翻转后的值。
如:
在32位机器上25这个值包含下列各位:
00000000000000000000000000011001
翻转后:(2550136832)
10011000000000000000000000000000
程序结果返回:
2550136832
解题思路:
这个题目涉及到二进制位,所以使用位的操作,相对来说更加简单一些:
1、先将value按位与1就能拿出value的最低位,然后在对最低位进行左移31位的操作;
2、再拿出value的第二位,先将value右移一位,然后按位与上一个1,在将结果左移上30位,累加到刚才的那个结果当中;
3、重复上面的操作,一次拿出第i为,先将value右移i-1位,然后在按位与1,将结果左移32-i位,然后将结果累加到之前的结果中;
代码实现:
unsigned int reverse_bit(unsigned int value)
{
int i = 0;
int tmp = 0;
for (i = 32; i > 0; i--)
{
tmp += ((value >> (32 - i)) & 1) << (i - 1);
}
return tmp;
}
int main()
{
unsigned int value = 25;
int ret = 0;
ret = reverse_bit(value);
printf("%u\n", ret);//%u是指输出无符号的整数
return 0;
}
运行结果: