二进制位模式反转--c语言

题目描述

编写函数:unsigned int reverse_bit(unsigned int value);这个函数的返回 值value的二进制位模式从左到右翻转后的值。
例子:在32位机器上25这个值包含下列各位:00000000000000000000000000011001
翻转后:(2550136832)10011000000000000000000000000000

代码部分

#include <stdio.h>
__uint32_t reverse_bits(__uint32_t value);

int main(void)
{
    __uint32_t number;
    printf("please input the number which you want to reverse:");
    scanf("%u",&number);
    __uint32_t ret=reverse_bits(number);
    printf("after reversed:%u",ret);
}

__uint32_t reverse_bits(__uint32_t value)
{
    __uint32_t result=0;
    for(int i=0;i<32;i++)
        if((value>>i)&1)
            result|=((value>>i)&1)<<(31-i);
    return result;
}

思路部分

  1. 本程序不依赖于机器整型值长度,故使用__uint32_t的类型声明变量;
  2. if语句用来判断当前位与运算后是否为1,为1则执行下一句,为0则跳过下一句执行,一定程度上节省了时间(虽然不是很重要);
  3. 因为前面跳过执行,所以当要执行result那一句时,需要把前面跳过的补上,有value>>i;
  4. 跳过之后当前位和1进行与运算,然后向左移31-i位,最后与result进行或运算,把需要的位设置为1;
posted @ 2020-04-20 22:09  comixH  阅读(791)  评论(0编辑  收藏  举报