求一个数的二进制从左到右翻转后的值

来源:互联网 发布:python openwrt 模拟 编辑:程序博客网 时间:2024/06/07 22:23

在32位机器上25这个值包含下列各位:
00000000000000000000000000011001
翻转后:(2550136832)
10011000000000000000000000000000

  首先要求一个数的二进制,然后把它存入数组中,n&1就是这个数最低位的二进制,然后把n右移一位可以求出倒数第二位的二进制,不断进行循环,直到求出n的最高位的二进制。次时数组中存的就是这个数由低位到高位的二进制,只需把这个数转换为10进制即可。转换10进制,最低位乘以2的0次方,最高位乘以2的31次方就可求出10进制数。代码如下

#include<stdio.h>#include<stdlib.h>#include<math.h>unsigned int reverse_bit(unsigned int value){    int bin[32] = { 0 };    int i = 0;    unsigned int tmp = 0;    unsigned int sum = 0;    for (i = 0; i < 32; i++)    {        bin[i] = value & 1;        value >>= 1;    }    for (i = 0; i <32; i++)    {        tmp = (unsigned int)pow(2, i) * bin[31-i];        sum += tmp;    }    return sum;}int main(){    unsigned int n = 25;    printf("%u", reverse_bit(n));    system("pause");    return 0;}
阅读全文
1 0
原创粉丝点击