C算法题,关于二进制逆序的

图片说明
问一下各位大神,有会这道题的么?求代码,急!

 #include<stdio.h>  
#include<stdlib.h>  
int main()  
{  
  int n = 0;  
  int num =0;  
  int i = 0;  
  scanf("%d", &n);  
  for (i = 0; i < 32; i++)  
  {  
    num = num << 1;                      //当num的最低位保存了数据之后再左移  
    num |= ((n>>i)&1);                     //将n的第i个bit位与num按位或,将这一位保存到num中  
  }  
  printf( "n=%d  num=%d\n", n,num);  
  system( "pause");  
  return 0;  
}

unsigned int reverse_bit(int num)

{

int i;

int bit;

unsigned new_num = 0;

for (i = 0; i < 32; i++)

{

bit = num & 1; //取出最后一位

new_num <<= 1; //新数左移

new_num =new_num | bit; //把刚取出的一位加到新数

num >>= 1; //原数右移,准备取第二位

}

return new_num;

}