<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [TOC] # 二進制數、八進制數和十六進制數的表示 一個數字默認就是十進制的,表示一個十進制數字不需要任何特殊的格式。但是,表示一個二進制、八進制或者十六進制數字就不一樣了,為了和十進制數字區分開來,必須采用某種特殊的寫法,具體來說,就是在數字前面加上特定的字符,也就是加前綴 ## 二進制 二進制由 0 和 1 兩個數字組成,使用時必須以`0b`或`0B`(不區分大小寫)開頭,例如 ~~~ //合法的二進制 int a = 0b101; //換算成十進制為 5 int b = -0b110010; //換算成十進制為 -50 int c = 0B100001; //換算成十進制為 33 //非法的二進制 int m = 101010; //無前綴 0B,相當于十進制 int n = 0B410; //4不是有效的二進制數字 ~~~ 讀者請注意,標準的C語言并不支持上面的二進制寫法,只是有些編譯器自己進行了擴展,才支持二進制數字。換句話說,并不是所有的編譯器都支持二進制數字,只有一部分編譯器支持,并且跟編譯器的版本有關系。 下面是實際測試的結果: * VisualC++6.0 不支持。 * Visual Studio 2015 支持,但是 Visual Studio 2010 不支持;可以認為,高版本的 Visual Studio 支持二進制數字,低版本的 Visual Studio 不支持。 * GCC4.8.2 支持,但是 GCC 3.4.5 不支持;可以認為,高版本的 GCC 支持二進制數字,低版本的 GCC 不支持。 * LLVM/Clang 支持(內嵌于 Mac OS 下的 Xcode 中) ## 八進制 八進制由 0~7 八個數字組成,使用時必須以`0`開頭(注意是數字 0,不是字母 o),例如 ~~~ //合法的八進制數 int a = 015; //換算成十進制為 13 int b = -0101; //換算成十進制為 -65 int c = 0177777; //換算成十進制為 65535 //非法的八進制 int m = 256; //無前綴 0,相當于十進制 int n = 03A2; //A不是有效的八進制數字 ~~~ ## 十六進制 十六進制由數字 0~9、字母 A~F 或 a~f(不區分大小寫)組成,使用時必須以`0x`或`0X`(不區分大小寫)開頭,例如: ~~~ //合法的十六進制 int a = 0X2A; //換算成十進制為 42 int b = -0XA0; //換算成十進制為 -160 int c = 0xffff; //換算成十進制為 65535 //非法的十六進制 int m = 5A; //沒有前綴 0X,是一個無效數字 int n = 0X3H; //H不是有效的十六進制數字 ~~~ # 二進制數、八進制數和十六進制數的輸出 C語言中常用的整數有 short、int 和 long 三種類型,通過 printf 函數,可以將它們以八進制、十進制和十六進制的形式輸出。上節我們講解了如何以十進制的形式輸出,這節我們重點講解如何以八進制和十六進制的形式輸出,下表列出了不同類型的整數、以不同進制的形式輸出時對應的格式控制符: ![](https://box.kancloud.cn/f4b4ce5c2cf5e8bd72baf50ee2a17051_360x149.png) 十六進制數字的表示用到了英文字母,有大小寫之分,要在格式控制符中體現出來: * `%hx`、`%x` 和 `%lx` 中的`x`小寫,表明以小寫字母的形式輸出十六進制數; * `%hX`、`%X` 和 `%lX` 中的`X`大寫,表明以大寫字母的形式輸出十六進制數 注意,雖然部分編譯器支持二進制數字的表示,但是卻不能使用 printf 函數輸出二進制,這一點比較遺憾。當然,通過轉換函數可以將其它進制數字轉換成二進制數字,并以字符串的形式存儲,然后在 printf 函數中使用`%s`輸出即可。考慮到讀者的基礎還不夠,這里就先不講這種方法了 以不同進制的形式輸出整數 ~~~ #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=126, b=2713, c=7325603 a=86, b=1483, c=1944451 a=56, b=5cb, c=1dab83 a=56, b=5CB, c=1DAB83 ~~~ 從這個例子可以發現,一個數字不管以何種進制來表示,都能夠以任意進制的形式輸出。數字在內存中始終以二進制的形式存儲,其它進制的數字在存儲前都必須轉換為二進制形式;同理,一個數字在輸出時要進行逆向的轉換,也就是從二進制轉換為其他進制。 **輸出時加上前綴** 請讀者注意觀察上面的例子,會發現有一點不完美,如果只看輸出結果: * 對于八進制數字,它沒法和十進制、十六進制區分,因為八進制、十進制和十六進制都包含 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 ~~~ 十進制數字沒有前綴,所以不用加`#`。如果你加上了,那么它的行為是未定義的,有的編譯器支持十進制加`#`,只不過輸出結果和沒有加#一樣,有的編譯器不支持加`#`,可能會報錯,也可能會導致奇怪的輸出;但是,大部分編譯器都能正常輸出,不至于當成一種錯誤
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看