整数的逆序存储

现在有一个整数,对其进行逆序存储。

例如,3                   (0000 0000 0000 0000 0000 0000 0000 0011)2

         3221225472         (1100 0000 0000 0000 0000 0000 0000 0000)2

/*整数逆序存储*/
#include <stdio.h>
unsigned int reverse(unsigned int a){
 unsigned int b=0;
 for(int i=0;i<31;i++)
 {
  if(a & 0x01)
  {
   b = b | 0x01;
  }
  b = b<<1;
  a = a>>1;
  
 }
 return b;
}
void digit_to_binary(unsigned int b)
{
 char ch[32];
 for(int i=0;i<32;i++){
  int t = b%2;
  int j = 31 -i;
  ch[j] = t;
  b /= 2;
 }
 for(int i=0;i<32;i++){
  printf("%d",ch[i]);
 }
}
int main()
{
 unsigned int x,y;
 scanf("%d",&x);
 y = reverse(x); 
 printf("%u\t",x);
 digit_to_binary(x);
 printf("\n");
 printf("%u\t",y);
 digit_to_binary(y);
 printf("\n");
 return 0;
}

 

思路:判断a的二进制数的最后一位是否为1,如果为1,则将b的最低位设置为1,然后向左移,a向右移动。如果最后一位为0,则直接对两个变量进行移动。

PS:对逆序存储有更好的方法,十进制数的二进制输出有更好的方法请告知,联系QQ:171380979 验证:博客园

posted @ 2012-11-27 23:58  Tiu.G  阅读(365)  评论(0编辑  收藏  举报