二級(jí)C++精品課程2-3:基本數(shù)據(jù)類型

字號(hào):

在C++中,數(shù)據(jù)具有不同的類型,類型定義了變量可存儲(chǔ)的數(shù)值范圍以及可進(jìn)行的操作變量是用于內(nèi)存中保存數(shù)據(jù)的,每個(gè)變量都必須有確定的數(shù)據(jù)類型,C++語(yǔ)言的數(shù)據(jù)類型如圖2-1所示。
    在圖2-1中,把數(shù)據(jù)類型劃分為基本的數(shù)據(jù)類型和復(fù)合的數(shù)據(jù)類型,我們也可把數(shù)據(jù)類型分為內(nèi)置的類型和用戶定義的類型兩大類,用戶定義的類型在使用以前,必須先定義,包括:結(jié)構(gòu)、類、枚舉和聯(lián)合類型;內(nèi)置的類型是指直接被C++提供的類型,也就是說(shuō),是除用戶定義的類型以外的其它類型。
    圖2-1 C++數(shù)據(jù)類型
    從語(yǔ)法上來(lái)說(shuō),void類型也是基本的類型,但是,它不是一個(gè)完整的類型,只能作為更復(fù)雜類型的一部分。沒(méi)有void類型的變量,它或者用于指定一個(gè)函數(shù)(在第五章介紹)沒(méi)有返回值,或者作為指針(在第七章介紹)類型,表示該指針指向未知類型的變量,例如:
    void x; //錯(cuò)誤,沒(méi)有void變量
    void f( ); //函數(shù)f不返回值
    void *pv; //指針pv指向未知類型的變量
    布爾型、字符型、整型和浮點(diǎn)型也稱為算術(shù)類型;枚舉、指針、數(shù)組、引用、結(jié)構(gòu)、聯(lián)合和類稱之為復(fù)合數(shù)據(jù)類型,它們能通過(guò)其它數(shù)據(jù)類型進(jìn)行構(gòu)造。
    在基本的數(shù)據(jù)類型char、 int前可以添加修飾符,以改變基本類型的意義,可用的修飾符有l(wèi)ong、short、signed和unsigned四種,另外,雙精度型前可以加long修飾符?;镜臄?shù)據(jù)類型及其表示范圍,可參見(jiàn)表2-3。
    表2-3 基本的數(shù)據(jù)類型及其表示范圍
    類型名 類型 字節(jié) 表示范圍
    char 字符型 1 -128 ~127
    unsigned char 無(wú)符號(hào)字符型 1 0 ~255
    signed char 有符號(hào)字符型(與字符型相同) 1 -128 ~127
    int 整型 * 與機(jī)器有關(guān)
    unsigned int 無(wú)符號(hào)整型 * 與機(jī)器有關(guān)
    signed int 有符號(hào)整型(與整型相同) * 與機(jī)器有關(guān)
    short int 短整型 2 -32,768~ 32,767
    unsigned short int 無(wú)符號(hào)短整型 2 0~65,535
    signed short int 有符號(hào)短整型(與短整型相同) 2 -32,768~ 32,767
    long int 長(zhǎng)整型 4 -2,147,483,648 ~2,147,483,647
    signed long int 有符號(hào)長(zhǎng)整型(與長(zhǎng)整型相同) 4 -2,147,483,648 ~ 2,147,483,647
    unsigned long int 無(wú)符號(hào)長(zhǎng)整型 4 0~4,294,967,295
    float 浮點(diǎn)型 4 3.4E +/- 38 (7位有效數(shù)字)
    double 雙精度型 8 1.7E +/- 308 (15位有效數(shù)字)
    long double 長(zhǎng)雙精度型 10 1.2E +/- 4932 (19位有效數(shù)字)
    unsigned和signed只用于修飾char和int,且signed修飾詞可以省略。當(dāng)用unsigned修飾詞時(shí),后面的類型說(shuō)明符可以省略。例如:
    signed int n; //與"int n;"等價(jià)
    signed char ch; //與"char ch;"等價(jià)
    unsigned int n; //與"unsigned n;"等價(jià)
    unsigned char ch; //與"unsigned ch;"等價(jià)
    short只用于修飾int,且用short修飾時(shí),int可以省略,即:
    short int n; //與"short n;"等價(jià)
    long只能修飾int和double。當(dāng)用long修飾int時(shí),int可以省略,即:
    long int n; //與"long n;"等價(jià)
    int和unsigned int類型占用一個(gè)機(jī)器一個(gè)字(word)的字節(jié)。在16位操作系統(tǒng)上,它們占用2個(gè)字節(jié);在32位操作系統(tǒng)上,它們占用4個(gè)字節(jié)。
    各種數(shù)據(jù)類型精度由低到高排列如圖2-2:
     圖2-2
    如果一個(gè)雙目運(yùn)算符兩邊的操作數(shù)類型不同,先要將它們轉(zhuǎn)換為相同的類型,即較低類型轉(zhuǎn)換為較高類型,然后再參加運(yùn)算。所謂類型的高低,跟所占的存儲(chǔ)空間大小有直接關(guān)系,所占存儲(chǔ)空間越大的類型,級(jí)別越高。
    圖中橫向的箭頭表示必須的轉(zhuǎn)換,如兩個(gè)float型數(shù)參加運(yùn)算,雖然它們類型相同,但仍要先轉(zhuǎn)換成double型再進(jìn)行運(yùn)算,結(jié)果亦為double型??v向箭頭表示當(dāng)運(yùn)算符兩邊的操作數(shù)為不同類型時(shí)的轉(zhuǎn)換,如一個(gè)long型數(shù)據(jù)與一個(gè)int型數(shù)據(jù)一起運(yùn)算,需要先將int型數(shù)據(jù)轉(zhuǎn)換為long型,然后兩者再進(jìn)行運(yùn)算,結(jié)果為long型。所有這些轉(zhuǎn)換都是由系統(tǒng)自動(dòng)進(jìn)行的,使用時(shí)只需了解結(jié)果的類型即可。
     程序2-2
     #include
    void main(void)
    {
    char a = 'x';
    int b = 3,f = 2;
    float c = 2.5678;
    double d = 5.2345
    long e = 32L;
    cout<}
    下面我們來(lái)分析一下這段程序:
    (1) 進(jìn)行d / c運(yùn)算時(shí),要將c轉(zhuǎn)換成double型,運(yùn)算的中間結(jié)果為double型;
    (2) 進(jìn)行e * f運(yùn)算時(shí),將f轉(zhuǎn)換為long型,運(yùn)算的中間結(jié)果為long型;
    (3) 進(jìn)行a - b運(yùn)算時(shí),將a轉(zhuǎn)換為int型(數(shù)值為ASCⅡ碼值120),運(yùn)算的中間結(jié)果為int型;
    (4) 當(dāng)(3)的中間結(jié)果與(1)的中間結(jié)果運(yùn)算時(shí),將(3)的中間結(jié)果轉(zhuǎn)換為double型,運(yùn)算的中間結(jié)果為double型;
    (5) 當(dāng)(4)的中間結(jié)果與(2)的中間結(jié)果運(yùn)算時(shí),將(2)的中間結(jié)果轉(zhuǎn)換為double型,得出最后結(jié)果。
    于是,程序最后的運(yùn)行結(jié)果為55.038515。