今天做了一道关于位运算的题。
题目:实现把一个无符号数的二进制位模式从左到右反转后输出。
例如:在32位机器下,25的二进制为0000 0000 0000 0000 0000 0000 0001 1001
变成1001 1000 0000 0000 0000 0000 0000 0000
即2550136832.
我采用的是移位来得出结果,具体代码如下:
#include<stdio.h>
unsigned int reverse_bit(unsigned int input)
{
unsigned int sum = 0;
int n = 0;
unsigned int result = 0;
while(input)
{
result = input%2;
sum = sum + (result<<(31-n));//每一位移位后相加
input = input/2 ;
n++;
}
return sum;
}
int main()
{
unsigned int accept = 0;
unsigned int input = 0;
scanf("%d",&input);
accept = reverse_bit(input);
printf("%u",accept);
return 0;
}
代码是从右向左取出每一个二进制,每取出一个向左移动相应的位数,最后相加。。。