函数原型:
unsigned int reverse_bit(unsigned int value);
这个函数的返回值是value二进制位模式从左到右翻转后的值。思路:这里我们采用效率较高的一种方法——位操作
我们先定义一个变量sum = 0,把sum作为value反序后的数。
利用 value按位与1得到的就是value二进制序列的最低位,例如value=0101,那 0101 & 0001 = 1;这样我们就得到了value的最低位——1,然后把0001左移31位,再按位或上sum,
那sum=10000000 00000000 00000000 00000000。
接下来把value右移1位,按位与1,再把得到的值左移30位按位或sum,按这样的步骤循环32次后得到的sum就是value反序后的值。
下面上代码:
unsigned int reversal_bit(unsigned int value)
{
int i = 0;
unsigned int sum = 0;
for (i = 0; i < 32; i++)
{
sum |= (((value >> i) & 1) <<(31 - i));//大家想想这里(value>>i)&1 可不可以换成value&(1<<i) ?
}
return sum;
}
int main()
{
unsigned int number = 25;
unsigned int ret = reversal_bit(number);
printf("%u\n", ret);
system("pause");
return 0;
}
25反序后的值: