编写函数,函数的返回值value的二进制位模式从左到右翻转后的值。

题目:

编写函数:

unsigned int reverse_bit(unsigned int value);
这个函数的返回 值value的二进制位模式从左到右翻转后的值。

在32位机器上25这个值包含下列各位:

00000000000000000000000000011001
翻转后:(2550136832)
10011000000000000000000000000000
程序结果返回:
2550136832

分析思路:

  1. unsigned int 的位长度可以通过计算得到,len=sizeof(unsigned int)*8;这样可以限制循环次数,
  2. 通过循环用所给数与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;
 }

运行结果
这里写图片描述

猜你喜欢

转载自blog.csdn.net/sister_wang0712/article/details/79900511