最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C 語(yǔ)言基礎(chǔ)教程(我的C之旅開始了)[五]

 更新時(shí)間:2007年02月25日 00:00:00   作者:  

12. 基本數(shù)據(jù)類型:整型(下)

1. 輸出各種整數(shù)類型的變量

    輸出不同類型的整數(shù),需要使用不用的格式限定符。輸出 unsigned int 類型的整數(shù),要用 %u 。輸出 long ,要用 %ld;如果要以十六進(jìn)制或者八進(jìn)制形式輸出,那就用 %lx(或者%lX)或者 %lo。注意:雖然整數(shù)常量的后綴使用大寫或者小寫英文字母都沒關(guān)系,但是它們格式限定符必須使用小寫!如果我們要輸出 short 類型的整數(shù),可以在 %d 中間加上前綴 h,也就是%hd;同理,%ho%hx(或者 %hX )分別表示以八進(jìn)制或十六進(jìn)制形式輸出。前綴 hl 可以和 u 組合,表示輸出無(wú)符號(hào)整數(shù)。例如:%lu 表示輸出 unsigned long 類型的整數(shù);%hu 表示輸出unsigned short類型的整數(shù)。如果您的編譯器支持C99,可以使用 %lld%llu 分別表示輸出 long long 和 unsigned long long 。下面我們來(lái)看一個(gè)輸出各種類型整數(shù)的程序:

        #include <stdio.h>

        int main(void)
        {
            unsigned int un = 3000000000; /* 我使用的編譯器 int 是 32 位的 */
            short end = 200;              /* 而 short 是 16 位的      */
            long big = 65537;

            printf("un = %u and not %d\n", un, un);
            printf("end = %hd and %d\n", end, end);
            printf("big = %ld and not %hd\n", big, big);

            printf("Press ENTER to quit...");
            getchar();
            return 0;
        }

使用 Dev-C++ 編譯運(yùn)行這個(gè)程序輸出結(jié)果如下:

        un = 3000000000 and not -1294967296
        end = 200 and 200
        big = 65537 and not 1
        Press ENTER to quit...

     這個(gè)程序表明,錯(cuò)誤使用格式限定符會(huì)導(dǎo)致意想不到的輸出。首先,錯(cuò)誤使用 %d 來(lái)做無(wú)符號(hào)整型變量 un 的格式限定符,導(dǎo)致輸出的是負(fù)數(shù)。這是因?yàn)槲业挠?jì)算機(jī)使用相同的二進(jìn)制形式來(lái)表示 3000000000 和 -129496296 ,而計(jì)算機(jī)只認(rèn)識(shí)二進(jìn)制。所以,如果我們使用 %u 告訴 printf 輸出無(wú)符號(hào)整數(shù),輸出的就是 3000000000;如果我們誤用了 %d,那么輸出的就是一個(gè)負(fù)數(shù)。不過,如果我們把代碼中的 3000000000 改成 96 的話,輸出就不會(huì)出現(xiàn)異常。因?yàn)?96 沒有超出 int 的表示范圍。
    然后,對(duì)于第二個(gè) printf,無(wú)論我們使用 %hd 還是 %d,輸出的結(jié)果都是一樣的。這是因?yàn)?C 語(yǔ)言標(biāo)準(zhǔn)規(guī)定,當(dāng) short 類型值傳遞給函數(shù)時(shí),要自動(dòng)轉(zhuǎn)化成 int 類型值。之所以轉(zhuǎn)化成 int,是因?yàn)?int 被設(shè)計(jì)為計(jì)算機(jī)處理效率最高的整數(shù)類型。所以,對(duì)于 short 和 int 大小不同的計(jì)算機(jī)來(lái)說,把變量 end 轉(zhuǎn)化成 int 類型再傳遞給函數(shù),速度更快。如此說來(lái),h 好像沒有存在意義。其實(shí)不然。我們可以用 %hd 來(lái)看看較大的整數(shù)類型被截?cái)喑?short 類型的時(shí)候會(huì)是什么樣的。
    而第三個(gè)printf,由于誤用%hd,導(dǎo)致輸出是1。這是因?yàn)?,如果long是32位的話,65537的二進(jìn)制形式便是 0000 0000 0000 0001 0000 0000 0000 0001,而 %hd 命令 printf 輸出 short 類型的值,從而導(dǎo)致 printf 只對(duì)后 16 位進(jìn)行處理,最終導(dǎo)致輸出 1。
    在前面的教程里,我們說過,保證格式限定符的數(shù)目和參數(shù)數(shù)目一致是我們的責(zé)任。同樣,保證格式限定符的類型和參數(shù)類型一致也是我們的責(zé)任!正如上面所說的那樣,錯(cuò)誤使用格式限定符會(huì)導(dǎo)致意想不到的輸出!


2. 整數(shù)溢出

    首先請(qǐng)看以下程序:

            #include <stdio.h>

            int main(void)
            {
                /* 32 位 int 表示范圍的上限和下限 */
                int i = 2147483647, j = -2147483648;
                unsigned int k = 4294967295, l = 0;

                printf("%d %d %d %d\n", i, i+1, j, j-1);
                printf("%u %u %u %u %u\n", k, k+1, k+2, l, l-1);

                printf("Press ENTER to quit...");
                getchar();
                return 0;
            }

使用 Dev-C++ 編譯運(yùn)行這個(gè)程序輸出結(jié)果如下:

            2147483647 -2147483648 -2147483648 2147483647
            4294967295 0 1 0 4294967295
            Press ENTER to quit...

     這個(gè)程序中,i+1 是負(fù)數(shù),j-1 是正數(shù),k+1 是 0,l-1 是 4294967295 。這是因?yàn)榧訙p運(yùn)算過后,它們的值超出了它們對(duì)應(yīng)的那種整數(shù)類型的表示范圍,我們把這種現(xiàn)象稱為溢出
    unsigned int 型變量的值如果超過了上限,就會(huì)返回 0,然后從 0 開始增大。如果小于 0,那么就會(huì)到達(dá) unsigned 型的上限,然后從上限開始減小。就好像一個(gè)人繞著跑道跑步一樣,繞了一圈,又返回出發(fā)點(diǎn)。int 型變量溢出的話,會(huì)變成負(fù)數(shù),或者正數(shù)。
    對(duì)于 unsigned 類型的整數(shù),它們溢出時(shí)的情況一定和上面描述的一樣,這是標(biāo)準(zhǔn)規(guī)定的。但是標(biāo)準(zhǔn)并沒有規(guī)定有符號(hào)整數(shù)溢出時(shí)會(huì)出現(xiàn)什么情況。這里描述的有符號(hào)整數(shù)溢出時(shí)出現(xiàn)的情況是最常見的,但是在別的計(jì)算機(jī),使用別的編譯器,也可能出現(xiàn)不同的情況。

13. 標(biāo)識(shí)符命名規(guī)則
 

1. 長(zhǎng)度限制

    C89 規(guī)定,編譯器至少應(yīng)該能夠處理 31 個(gè)字符(包括 31)以內(nèi)的內(nèi)部標(biāo)識(shí)符(internal identifier);而對(duì)于外部標(biāo)識(shí)符(external identifier),編譯器至少應(yīng)該能夠處理 6 個(gè)字符(包括 6)以內(nèi)的外部標(biāo)識(shí)符。所謂標(biāo)識(shí)符,是指我們?yōu)樽兞浚╲ariable)、宏(macro),或者函數(shù)(function)等等取的名字。例如 int num; 這個(gè)語(yǔ)句中的 num 就是一個(gè)標(biāo)識(shí)符。
    最新的 C99 標(biāo)準(zhǔn)規(guī)定,編譯器至少應(yīng)該能夠處理 63 個(gè)字符(包括 63)以內(nèi)的內(nèi)部標(biāo)識(shí)符;編譯器至少應(yīng)該能夠處理 31 個(gè)字符(包括 31)以內(nèi)的外部標(biāo)識(shí)符。
    事實(shí)上,我們可以使用超出最大數(shù)目限制的字符來(lái)命名標(biāo)識(shí)符,不過編譯器會(huì)忽略超出的那部分字符。也就是說,如果我們用 35 個(gè)字符來(lái)命名變量,而那個(gè)編譯器最多只能處理 31 個(gè)字符的變量名的話,那么多出的那 4 個(gè)字符就會(huì)被編譯器忽略,只有前面的 31 個(gè)字符有效。有些古老的編譯器只能處理 8 個(gè)字符以內(nèi)的標(biāo)識(shí)符,對(duì)于這樣的編譯器來(lái)說,標(biāo)識(shí)符 kamehameha 和 kamehameko 是等價(jià)的,因?yàn)樗鼈兦懊?8 個(gè)字符相等。


2. 可用字符和組合規(guī)則

    標(biāo)準(zhǔn)規(guī)定,標(biāo)識(shí)符只能由大小寫英文字母,下劃線(_),以及阿拉伯?dāng)?shù)字組成。標(biāo)識(shí)符的第一個(gè)字符必須是大小寫英文字母或者下劃線,而不能是數(shù)字。

           合法命名   非法命名
             wiggles             $Z]**     /*      $、] 和 * 都是非法字符  */
              cat2            2cat      /*  不能以數(shù)字開頭  */
             Hot_Tub         Hot-Tub    /*  - 是非法字符  */
             taxRate        tax rate    /*  不能有空格  */
             _kcab            don't     /*  ' 是非法字符  */

操作系統(tǒng)和 C 語(yǔ)言標(biāo)準(zhǔn)庫(kù)里的標(biāo)識(shí)符一般以下劃線開頭,這是約定俗成的。因此,我們應(yīng)該避免使用下劃線作為我們自己定義的標(biāo)識(shí)符的開頭。
    C 語(yǔ)言是大小寫敏感的語(yǔ)言,也就是說,star、Star、sTar,stAr 和 STAR 等都是相互不同的標(biāo)識(shí)符。
    我們不能用關(guān)鍵字保留標(biāo)識(shí)符來(lái)給我們自定義的變量命名。關(guān)于關(guān)鍵字和保留標(biāo)識(shí)符,請(qǐng)點(diǎn)擊 關(guān)鍵字和保留標(biāo)識(shí)符

相關(guān)文章

  • 用C語(yǔ)言實(shí)現(xiàn)一個(gè)掃雷小游戲

    用C語(yǔ)言實(shí)現(xiàn)一個(gè)掃雷小游戲

    這篇文章主要為大家詳細(xì)介紹了用C語(yǔ)言實(shí)現(xiàn)一個(gè)掃雷小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • C語(yǔ)言正則表達(dá)式詳解 regcomp() regexec() regfree()用法詳解

    C語(yǔ)言正則表達(dá)式詳解 regcomp() regexec() regfree()用法詳解

    C語(yǔ)言處理正則表達(dá)式常用的函數(shù)有regcomp()、regexec()、regfree()和regerror(),這里就為大家介紹一下,需要的朋友可以參考一下啊
    2018-04-04
  • C++設(shè)計(jì)模式中控制反轉(zhuǎn)與依賴注入淺析

    C++設(shè)計(jì)模式中控制反轉(zhuǎn)與依賴注入淺析

    這篇文章主要介紹了C++設(shè)計(jì)模式中控制反轉(zhuǎn)與依賴注入,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2023-01-01
  • C++中實(shí)現(xiàn)fibonacci數(shù)列的幾種方法

    C++中實(shí)現(xiàn)fibonacci數(shù)列的幾種方法

    本文主要介紹了C++中實(shí)現(xiàn)fibonacci數(shù)列的幾種方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • opencv實(shí)現(xiàn)圖形輪廓檢測(cè)

    opencv實(shí)現(xiàn)圖形輪廓檢測(cè)

    這篇文章主要為大家詳細(xì)介紹了opencv實(shí)現(xiàn)圖形輪廓檢測(cè),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • C++簡(jiǎn)單輸出鉆石菱形圖效果

    C++簡(jiǎn)單輸出鉆石菱形圖效果

    這篇文章主要介紹了C++簡(jiǎn)單輸出鉆石菱形圖效果,涉及C++簡(jiǎn)單的數(shù)組操作與圖形打印技巧,需要的朋友可以參考下
    2016-05-05
  • C語(yǔ)言菜鳥基礎(chǔ)教程之加法

    C語(yǔ)言菜鳥基礎(chǔ)教程之加法

    C語(yǔ)言中運(yùn)算符和表達(dá)式數(shù)量之多, 在高級(jí)語(yǔ)言中是少見的。正是豐富的運(yùn)算符和表達(dá)式使C語(yǔ)言功能十分完善。 這也是C語(yǔ)言的主要特點(diǎn)之一。今天我們來(lái)看看加法運(yùn)算
    2017-10-10
  • 一篇文章帶你了解C語(yǔ)言內(nèi)存對(duì)齊公式

    一篇文章帶你了解C語(yǔ)言內(nèi)存對(duì)齊公式

    這篇文章主要介紹了C語(yǔ)言內(nèi)存對(duì)齊,包括內(nèi)存對(duì)其的基本概念及用法,以及注意事項(xiàng),并以實(shí)例形式加以說明,需要的朋友可以參考下,希望能給你帶來(lái)幫助
    2021-08-08
  • C語(yǔ)言strcat函數(shù)詳解:字符串追加的利器

    C語(yǔ)言strcat函數(shù)詳解:字符串追加的利器

    strcat函數(shù)用于將源字符串追加到目標(biāo)字符串的末尾,并返回一個(gè)指向目標(biāo)字符串的指針,它可以實(shí)現(xiàn)字符串的拼接操作
    2024-08-08
  • C語(yǔ)言字符串大小比較

    C語(yǔ)言字符串大小比較

    本文給大家分享給大家的是C語(yǔ)言的字符串大小比較的函數(shù),有需要的小伙伴可以參考下。
    2015-07-07

最新評(píng)論

五峰| 巴彦县| 白水县| 阿拉善盟| 彰化县| 手机| 河池市| 长岛县| 卢龙县| 丰城市| 宜宾县| 峡江县| 土默特左旗| 商都县| 周口市| 旅游| 南靖县| 广元市| 镇雄县| 都安| 和林格尔县| 永和县| 疏附县| 嘉义市| 泽普县| 石泉县| 饶平县| 沂南县| 吴堡县| 沁源县| 神木县| 体育| 瓦房店市| 乌拉特后旗| 武鸣县| 郸城县| 于田县| 上林县| 泗洪县| 龙江县| 靖江市|