把一个无符号整型数字的二进制序列反序后输出

函数原型: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<
    }
    return sum;
}

int main()
{
    unsigned int number = 25;
    unsigned int ret = reversal_bit(number);
    printf("%u\n", ret);
    system("pause");
    return 0;
}

25反序后的值:
把一个无符号整型数字的二进制序列反序后输出_第1张图片

你可能感兴趣的:(C练习题)