题目:
编写函数:
unsigned int reverse_bit(unsigned int value);
这个函数的返回 值value的二进制位模式从左到右翻转后的值。
在32位机器上25这个值包含下列各位:
00000000000000000000000000011001
翻转后:(2550136832)
10011000000000000000000000000000
程序结果返回:
2550136832
分析思路:
- unsigned int 的位长度可以通过计算得到,len=sizeof(unsigned int)*8;这样可以限制循环次数,
- 通过循环用所给数与1相与,得到最低位的值,可以左移至最高位,value不断右移,从而遍历value的每一位。
代码如下:
#include<stdio.h>
#include<stdlib.h>
unsigned int reverse_bit(unsigned int value)
{
int ret=0;
unsigned int len=sizeof(unsigned int)*8;//计算所给数占的二进制位
int i;
for(i=0;i<len;i++)
{
int r = value & 1; //所给数与1相与得到它的最低位
ret |=r<<(len-i-1);//最低位左移(len-i-1)位,到最高位,在和ret或
value>>=1; //所给数右移一位,去掉最低位
}
return ret;
}
int main()
{
unsigned int val;
scanf("%u",&val);
printf("%u\n",reverse_bit(val)); //%u以无符号十进制输出
system("pause");
return 0;
}
运行结果