如:
在32位机器上25这个值包含下列各位:
00000000000000000000000000011001
翻转后:(2550136832)
10011000000000000000000000000000
程序结果返回:
2550136832
这段代码的核心就在于实现函数的过程中,循环拿出二进制序列的每一位,并把它们整个翻转过来。那我们只需用value循环向右移动,每移动一位与1进行与运算保留这一位,然后再将它乘相应的权重即可翻转过去。代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
unsigned int reverse_bit(unsigned int value){
int i = 0;
unsigned int ret = 0;
for (i = 0; i < 32; i++){
ret += ((value >> i) & 1)*pow(2, 31 - i);
}
return ret;
}
int main(){
unsigned int ret = 0;
int n = 0;
n = 25;
ret = reverse_bit(n);
printf("%u\n", ret);
system("pause");
return 0;
}