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

将一个无符号整形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);