- C教程
- 鄭阿奇 丁有和編著
- 1974字
- 2018-12-30 07:30:51
2.2 基本數(shù)據(jù)類型
為了能將程序中指定的數(shù)據(jù)精確地用相應(yīng)的內(nèi)存單元來存儲(chǔ)和操作,C語言內(nèi)部預(yù)定義了一些數(shù)據(jù)類型,這些類型稱為基本數(shù)據(jù)類型,其名稱是內(nèi)部預(yù)定義的關(guān)鍵字,不能另做他用,且全部是小寫字母。同時(shí),為了在程序中能直接訪問內(nèi)存單元,C語言還提供了指針類型。除此之外,C語言還允許用戶根據(jù)基本數(shù)據(jù)類型和指針類型定義出更為復(fù)雜的數(shù)據(jù)類型,如數(shù)組、結(jié)構(gòu)和聯(lián)合等,用于多個(gè)或多項(xiàng)數(shù)據(jù)的描述。總之,C語言中的數(shù)據(jù)類型可分為基本類型、構(gòu)造類型和指針類型3類,如圖2.2所示。

圖2.2 C語言的數(shù)據(jù)類型
注:(1)void又稱無值類型,用于描述沒有返回值的函數(shù)以及通用指針類型
(2)圖中的type是指任意一個(gè)C語言合法的數(shù)據(jù)類型
這里,首先介紹C語言的基本類型,其他類型在以后的章節(jié)中陸續(xù)介紹。
2.2.1 整型
C語言中,用于基本整型定義的關(guān)鍵字是int,對于ANSI C來說,它表示int型整數(shù)的二進(jìn)制碼在計(jì)算機(jī)中是用2字節(jié)(16位)的連續(xù)內(nèi)存單元來存儲(chǔ)的。按照整數(shù)的機(jī)內(nèi)格式,最高位用做符號(hào)位(正數(shù)為0,負(fù)數(shù)為1),其余各位為數(shù)據(jù)位。這樣,int類型所指定的內(nèi)存可以存儲(chǔ)-32 768~+32 767范圍的整數(shù),或者說,int整型表示的數(shù)值范圍為-32 768~+32 767。
事實(shí)上,為了更好地控制整數(shù)的范圍和存儲(chǔ)空間,C語言還允許用short(短型)、long (長型)、signed(有符號(hào))和unsigned(無符號(hào))關(guān)鍵字來區(qū)分。
(1)當(dāng)short修飾int時(shí),稱為短整型,寫成short int,也可省略int,直接寫成short。在大多數(shù)計(jì)算機(jī)上,short表示2字節(jié),即16位長。默認(rèn)時(shí),short的最高位是符號(hào)位,這樣它能表示-32 768~+32 767范圍的整數(shù)。
(2)當(dāng)long修飾int時(shí),稱為長整型,寫成long int,也可省略int,直接寫成long。在大多數(shù)計(jì)算機(jī)上,long表示4字節(jié),即32位長。默認(rèn)時(shí),long的最高位也是符號(hào)位,這樣它能表示-2 147 483 648~+2147 483 647范圍的整數(shù)。
可見,short,int和long可以分別表示不同位長的整數(shù),如圖2.3所示。注意,Visual C++ 6.0所支持的整型int為4字節(jié),即32位(圖中的虛框已標(biāo)明)。

圖2.3 不同整型的存儲(chǔ)空間的大小
(3)當(dāng)unsigned修飾short,int和long時(shí),它強(qiáng)制使它們的符號(hào)位(最高位)也用做數(shù)據(jù)位,并與其他位一起來表示整數(shù)。這樣,它們所表示的整數(shù)的最小值是0,即只能表示正整數(shù)。例如,unsigned short表示的整數(shù)范圍是0~65 535。
(4)當(dāng)signed修飾short,int,long和long long(此類型為C99標(biāo)準(zhǔn)補(bǔ)充)時(shí),由于默認(rèn)時(shí)short,int和long都是有符號(hào)的,因而此時(shí)signed可以省略。例如,signed int可省略為int。
需要說明的是:在C語言中,unsigned int可省略為unsigned,而signed int既可省略為int,也可省略為signed。
2.2.2 實(shí)型
實(shí)型又可稱為浮點(diǎn)型。在C語言中,用于表示實(shí)型的類型名關(guān)鍵字有:float,double和long double。需要說明的是:ANSI C 并未規(guī)定具體的每一種實(shí)型的位長、精度和數(shù)值范圍。但在大多數(shù)計(jì)算機(jī)中:
(1)float是單精度實(shí)型,用32位(4字節(jié))來表示,其有效位數(shù)為6~7位,數(shù)值范圍約為-3.4×1038~+3.4×1038。
(2)double是雙精度實(shí)型,用64位(8字節(jié))來表示,其有效位數(shù)為15~16位,數(shù)值范圍約為-1.7×10308~+1.7×10308。
(3)long double是長雙精度實(shí)型,可用64位(8字節(jié))、80位(10字節(jié))或128位(16字節(jié))來表示,具體位長取決于C編譯器對其支持情況,如圖2.4所示(每個(gè)方格代表1字節(jié),實(shí)線方格表示大多數(shù)編譯器支持的字節(jié)數(shù),虛框表示可以增加的字節(jié)數(shù))。

圖2.4 不同實(shí)型的存儲(chǔ)空間的大小
2.2.3 字符型
在C語言中,char字符類型用于表示ASCII編碼的字符,即用來存儲(chǔ)字符的ASCII編碼,它有3種不同的類型:char,unsigned char和signed char。
一般來說,用char存儲(chǔ)小整數(shù)時(shí),可根據(jù)需要添加unsigned或signed修飾,unsigned char可看做是0~255的正整數(shù),signed char可看做是-128~127的小整數(shù)。若用char存儲(chǔ)字符,則不需要任何修飾。對于沒有任何修飾的char來說,char究竟有沒有符號(hào),取決于不同編譯器的處理方式。事實(shí)上,大多數(shù)編譯器(如Visual C++ 6.0)都將沒有任何修飾的char型默認(rèn)為signed char。
2.2.4 實(shí)際位長
在數(shù)據(jù)操作中,有時(shí)由于不知道C語言中的基本數(shù)據(jù)類型的實(shí)際位長,從而使數(shù)據(jù)溢出而導(dǎo)致計(jì)算結(jié)果的錯(cuò)誤。因此,常需要使用下面的程序來測試。
【例Ex_DataT.C】 基本數(shù)據(jù)類型的位長測試
#include<stdio.h> #include<conio.h> int main() { printf("char -------%d byte\n",sizeof(char)); printf("short -------%d bytes\n",sizeof(short)); printf("int -------%d bytes\n",sizeof(int)); printf("long -------%d bytes\n",sizeof(long)); printf("float -------%d bytes\n",sizeof(float)); printf("double -------%d bytes\n",sizeof(double)); printf("long double -------%d bytes\n",sizeof(long double)); return 0; /* 指定返回值 */ }
分析和說明:
(1)程序中,stdio.h頭文件定義的printf庫函數(shù)是一個(gè)帶格式的輸出函數(shù),由一對雙引號(hào)括起來的字符串,稱為格式字符串,其中的“%d”是將第2個(gè)實(shí)際參數(shù)(sizeof(…))的值按十進(jìn)制來填充到格式字符串中的“%d”位置處,然后輸出到屏幕中。
(2)sizeof是C語言的一個(gè)運(yùn)算符關(guān)鍵字,它的使用類似于一個(gè)函數(shù),用來獲取一個(gè)表達(dá)式、類型或數(shù)組等所占內(nèi)存的字節(jié)數(shù)大小。
這樣,該程序在Visual C++ 6.0中運(yùn)行,其運(yùn)行結(jié)果如下所示:
char --------1 byte short --------2 byte int --------4 byte long --------4 byte float --------4 byte double --------8 byte long double --------8 byte
這里再來列出ANSI C中的各種基本數(shù)據(jù)類型、位長和范圍,如表2.1所示。需要說明的是
(1)在表2.1的類型名中,方括號(hào)“[ ]”用來表示可以省略,本書做此約定。
表2.1 ANSI C的基本數(shù)據(jù)類型

(2)ANSI C和Visual C++ 6.0在基本數(shù)據(jù)類型上的區(qū)別為:Visual C++ 6.0中基本int類型的字節(jié)數(shù)默認(rèn)為4,long double類型的字節(jié)數(shù)默認(rèn)為8,而ANSI C分別為2字節(jié)和10字節(jié)。
- Flask Web全棧開發(fā)實(shí)戰(zhàn)
- C程序設(shè)計(jì)簡明教程(第二版)
- Python機(jī)器學(xué)習(xí):數(shù)據(jù)分析與評(píng)分卡建模(微課版)
- 深入實(shí)踐Spring Boot
- Python Tools for Visual Studio
- Python程序設(shè)計(jì)
- 用戶體驗(yàn)增長:數(shù)字化·智能化·綠色化
- Symfony2 Essentials
- SQL 經(jīng)典實(shí)例
- 一塊面包板玩轉(zhuǎn)Arduino編程
- Service Mesh實(shí)戰(zhàn):基于Linkerd和Kubernetes的微服務(wù)實(shí)踐
- 深入理解C指針
- App Inventor 2 Essentials
- SQL Server 入門很輕松(微課超值版)
- Qt 4開發(fā)實(shí)踐