【案例描述】
输入:123
输出:123(10)=1111011(2)
【案例分析】
1、利用输出控制符"%x"可以输出正整数的十六进制形式。
2、利用输出控制符"%o"(注意:是字母o,不是零)可以输出正整数的八进制形式。
3、没有输出控制符输出正整数的二进制形式。
4、利用stdlib.h的itoa函数,可以将整数转换为二进制字符串。该函数需要用到字符串处理的相关知识,请参阅7.6部分。
5、输出正整数m的形式可以使用以下思路:
(1)v=0x80000000,对应无符号整数的最高位(十六进制形式)
(2)f=0,标记是否已读取m的最高二进制位(用于忽略二进制位的前导0)
(3)如果v与m按位与非零,则执行A、B。否则执行C:
A、f=1,标记已读取m的最高二进制位
B、输出1。转(4)
C、如果f>0,则输出0。转(4)
(4)v按位右移一位
(5)如果v=0,则输出结束。否则转(3)
【参考代码】
main()
{ unsigned long m,v=0x80000000;
char f=0;
scanf("%lu",&m);
printf("%lu(10)=",m);
while(v)
{ if(v&m){f=1;printf("1");}
else if(f!=0)printf("0");
v>>=1;
}
printf("(2)");
}