【C語言】進制輸出加上前綴

  • 對於八進制數字,它沒法和十進制、十六進制區分,因爲八進制、十進制和十六進制都包含 0~7 這幾個數字。
  • 對於十進制數字,它沒法和十六進制區分,因爲十六進制也包含 0~9 這幾個數字。如果十進制數字中還不包含 8 和 9,那麼也不能和八進制區分了。
  • 對於十六進制數字,如果沒有包含 a~f 或者 A~F,那麼就無法和十進制區分,如果還不包含 8 和 9,那麼也不能和八進制區分了。

區分不同進制數字的一個簡單辦法就是,在輸出時帶上特定的前綴。在格式控制符中加上#即可輸出前綴,例如 %#x、%#o、%#lX、%#ho 等,請看下面的代碼:

#include <stdio.h>
int main()
{
    short a = 0b1010110;  //二進制數字
    int b = 02713;  //八進制數字
    long c = 0X1DAB83;  //十六進制數字
   
    printf("a=%#ho, b=%#o, c=%#lo\n", a, b, c);  //以八進制形似輸出
    printf("a=%hd, b=%d, c=%ld\n", a, b, c);  //以十進制形式輸出
    printf("a=%#hx, b=%#x, c=%#lx\n", a, b, c);  //以十六進制形式輸出(字母小寫)
    printf("a=%#hX, b=%#X, c=%#lX\n", a, b, c);  //以十六進制形式輸出(字母大寫)
   
    return 0;
}

運行結果:
a=0126, b=02713, c=07325603
a=86, b=1483, c=1944451
a=0x56, b=0x5cb, c=0x1dab83
a=0X56, b=0X5CB, c=0X1DAB83

十進制數字沒有前綴,所以不用加#。如果你加上了,那麼它的行爲是未定義的,有的編譯器支持十進制加#,只不過輸出結果和沒有加#一樣,有的編譯器不支持加#,可能會報錯,也可能會導致奇怪的輸出;但是,大部分編譯器都能正常輸出,不至於當成一種錯誤。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章