1.题目
一个无符号数二进制反转之后输出:
比如25
对应二进制:11001
反转之后二进制:
100110000000000...00
对应值:2550 1368 32
2.code
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
int main()
{
unsigned int ans=0;
unsigned int value;
scanf("%u",&value);
unsigned int i=1;
for(i=1;i!=0;i<<=1)
{
ans<<=1;
if(value&1!=0)
ans|=1;
value>>=1;
}
printf("%u",ans);
}
3.分析
首先,题目要求代码具备可移植性,也就是说在不同的机器上都可以进行计算,所以我们使用for循环进行机器上可以允许的位数的判断。我们将value右移,每次判断最后一位是否为1,如果为1,那么使用or的方式添加到最终结果上,对于最终结果左移。
其次,是无符号数进行输入输出时,使用%u,有符号数才是%d.