现在有一个整数,对其进行逆序存储。
例如,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 验证:博客园