读书人

将一个无符号整形32位数按位逆序解决方

发布时间: 2012-05-04 12:36:09 作者: rapoo

将一个无符号整形32位数按位逆序
我的方案如下,大家有啥好的方法,讨论讨论啊

C/C++ code
#include<stdio.h>int main(){unsigned int n = 0xFF008881;unsigned int tmp;unsigned int maskl = 0x1;unsigned int maskh = 0x80000000;unsigned int rst = 0;int i,j;printf("n = %x\n",n);for(i = 0; i <= 15; i++)  {    tmp = n & maskl;    maskl = maskl << 1;     for(j = i + 1; j <= 31 - i; j++)       {          tmp = tmp << 1;         }        rst = tmp | rst;    }for(i = 0; i <= 15; i++)  {    tmp = n & maskh;    maskh = maskh >> 1;     for(j = i + 1; j <= 31 - i; j++)       {          tmp = tmp >> 1;         }        rst = tmp | rst;    } printf("%x\n",rst);return 0;}


[解决办法]
C/C++ code
翻转一个32位二进制数unsigned int n;      scanf("%u",&n);      n = ((n >> 1) & 0x55555555) | ((n << 1) & 0xaaaaaaaa);       n = ((n >> 2) & 0x33333333) | ((n << 2) & 0xcccccccc);       n = ((n >> 4) & 0x0f0f0f0f) | ((n << 4) & 0xf0f0f0f0);       n = ((n >> 8) & 0x00ff00ff) | ((n << 8) & 0xff00ff00);       n = ((n >> 16) & 0x0000ffff) | ((n << 16) & 0xffff0000);       printf("%u",n); 

读书人网 >C语言

热点推荐