【案例描述】
輸入一個正整數,輸出該整數的二進制形式。
輸入: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)");
}