C语言实现一个数的二进制位模式从左到右翻转后的值

来源:互联网 发布:半岛雪人 mac 编辑:程序博客网 时间:2024/06/06 02:00

C语言实现一个数(32位)的二进制位模式从左到右翻转后的值,如0x1转化后为0x80000000;

第一种,取出num的每一位(与0x1按位与),然后或运算加到ret的后面,然后移位。

#include <stdio.h>#include <string.h>unsigned int reverse(unsigned int num){    //TODO:    int ret = 0;    int i = 0;    for (i = 0; i < 32; i++)    {        ret = ret << 1;        //printf("i1=%d %08x\n",i,ret);        ret = ret | (num >> i) & 1;        //printf("i2=%d %08x\n",i,ret);    }    return ret;}int main(int argc, char *argv[]){    unsigned int num = 0;    unsigned int ret = 0;    if (1 != fscanf(stdin, "0x%x", &num)) {        fprintf(stderr, "input error\n");        return 0;    }    ret = reverse(num);    printf("%08x\n", ret);    return 0;}

第二种运用权重来做,左右翻转就相当于这个数的二进制数的最高位由value*2^31变为value*2^0,变为最低位即可。

阅读全文
0 0
原创粉丝点击