在32位机器上25这个值包含下列各位:
00000000000000000000000000011001
翻转后:(2550136832)
10011000000000000000000000000000
首先要求一个数的二进制,然后把它存入数组中,n&1就是这个数最低位的二进制,然后把n右移一位可以求出倒数第二位的二进制,不断进行循环,直到求出n的最高位的二进制。次时数组中存的就是这个数由低位到高位的二进制,只需把这个数转换为10进制即可。转换10进制,最低位乘以2的0次方,最高位乘以2的31次方就可求出10进制数。代码如下
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
unsigned int reverse_bit(unsigned int value)
{
int bin[32] = { 0 };
int i = 0;
unsigned int tmp = 0;
unsigned int sum = 0;
for (i = 0; i < 32; i++)
{
bin[i] = value & 1;
value >>= 1;
}
for (i = 0; i <32; i++)
{
tmp = (unsigned int)pow(2, i) * bin[31-i];
sum += tmp;
}
return sum;
}
int main()
{
unsigned int n = 25;
printf("%u", reverse_bit(n));
system("pause");
return 0;
}