例:25
在32位机器上25这个值包含下列各位:
00000000000000000000000000011001
翻转后:(2550136832)
10011000000000000000000000000000
程序结果返回:
2550136832
将value的二进制值从右至左依次从左至右赋给另一个数
代码如下:
#include<stdio.h>
#include<windows.h>
int reverse_bit(unsigned int value)
{
int a = 0;
int b = 0;
int i = 1;
for (; i <= 31; i++)
{
a = value & 1; //取value的最后一位
value = value >> 1; //value的数值右移,取前一位
b = a | b;//将a(value)的最后一位赋给b
b = b << 1;//b左移一位,空出最后一位给value的最后一位
}
return b;
}
int main()
{
printf("%u\n", reverse_bit(25));
system("pause");
return 0;
}
值得注意的是i的循环次数。
value的二进制序列共32位,而b的值是从第一位开始左移的,故只能循环31次。
代码改进:
可以直接将value中的数按位置准确放入b中
#include<stdio.h>
#include<windows.h>
int reverse_bit(unsigned int value)
{
int a = 0;
int b = 0;
int i = 1;
for (; i <= 32; i++)
{
a = value & 1;//将value的最后一位赋给a
if (1==a)
b|=(1 << (32 - i));//直接将value中的数按位置准确放入b中
value = value >> 1;
}
return b;
}
int main()
{
printf("%u\n", reverse_bit(25));
system("pause");
return 0;
}