例如
在32位机器上25这个值包含下列各位:
00000000000000000000000000011001
翻转后:(2550136832)
10011000000000000000000000000000
程序结果返回:
2550136832
解题思路
当一个数与1进行按位与操作(&)的时候
当这个数为0的时候结果就为0,当为1的时候就为1
当一个数与0进行按位或(|)操作的时候
这个数为0的时候结果就为0,为1的时候结果就为1
可以利用这个原理对一个数的每一位进行 & 操作
然后将这个值与0进行 | 操作
然后将结果<<进行右移操作
对这个数进行>>左移操作
进行32次循环就可以将这个数的每一为逆转
#include<stdio.h>
unsigned int reverse_bit(unsigned int value)
{
int i = 0;
unsigned int ret = 0;
for (i = 0; i < 32; i++)
{
ret <<= 1;
ret=(ret | (value & 1));
value >>= 1;
}
return ret;
}
int main()
{
int a = 25;
int b=reverse_bit(a);
printf("%u\n", b);
return 0;
}