2.3 基本數據類型
數據類型是對系統中的實體的一種抽象,它描述了某種實體的基礎特性,包括值的表示、存儲空間的大小,以及對該值的操作。C++的數據類型包括基本數據類型和構造數據類型兩類。構造數據類型又稱復合數據類型,是一種更高級的抽象。當變量被定義為某種類型時會受到系統對該類型的特別保護,確保其值不受非法操作。為簡單起見,此處只介紹C++的基本數據類型,構造數據類型將在第9章中詳細介紹。
一般來說,C++語言的基本數據類型有如下4種。
● 整型:說明符為int。
● 字符型:說明符為char。
● 浮點型(又稱實型):說明符為float(單精度)、double(雙精度)。
● 布爾型:說明符為bool,只有兩個取值。
為了滿足各種情況的需要,上述的幾種類型前面還可以加上修飾符改變原來的含義。主要的修飾符有如下4種。
● signed:表示有符號。
● unsigned:表示無符號。
● long:表示長型。
● short:表示短型。
上述4種修飾符都適用于整型和字符型,只有long還適用于雙精度浮點型。數據類型規定的存儲空間都是按字節算的,其占用的字節數會根據機器字長的不同而有所變化。
提示:一般來說,變量所占空間的大小與被定義的類型和機器有關,為此要注意哪些數據類型會受機器的影響。
C++中各種基本數據類型及其常用的派生類型的描述和取值范圍如表2-2所示。
表2-2 C++基本數據類型

在上表中,如果在int整型數據類型前含有類型修飾符如short、signed等時,可省略int。例如,short int類型可簡寫為short類型。
2.3.1 整型
根據上面的介紹,讀者可以知道,聲明整型數據類型的關鍵字為int,如果給其加上unsigned、singed、short和long等修飾符,整型數據類型可分為4種,分別對應為無符號整型、有符號整型、短整型和長整型。其分別對應的取值范圍讀者可參見表2-2。例如,下列語句定義一個有符號的整型變量:
int i;
上述語句定義的變量i的取值范圍為-231~231-1,這在一般的應用中已經足夠了。因此,定義一個變量為int型是具體程序中應用較多的。除了定義整型變量外,常量也有整型。在程序中書寫整型常量時,沒有小數部分。用戶可根據需要分別用十進制、八進制和十六進制的形式書寫:
● 十進制格式:由數字0至9和正、負號組成,書寫時直接寫出數字,如123,-516,+1000等。
● 八進制格式:以數字0開頭的數字(0至7)序列,如0111、010007、0177777等。
● 十六進制格式:以0x或0X開頭的數字序列,如0x78AC、0xFFFF等。
【范例2-4】整型數據類型的使用。該范例是一個使用了整型數據類型的程序,在該程序中,定義了一個整型變量,給其賦值后輸出,實現代碼如代碼清單2-4所示。
代碼清單2-4
1 # include <iostream.h> //包含輸入/輸出頭文件 2 void main() 3 { 4 int i; //聲明整型變量 5 i = 123; //賦值 6 cout<<i<<endl; //輸出 7 }
【運行結果】在Visual C++中創建一個【C++ Source File】,將上述代碼輸入其中,輸出結果如圖2-8所示。

圖2-8 整型數據類型
【范例解析】范例2-4代碼中,首先聲明整型變量i,接著為其賦值,最后輸出該變量中的值,其中,cout語句后的endl表示換行。
警告:如果賦值時為該整型變量賦非整型的值,如123.4,那么系統編譯時將給出警告信息,如圖2-9所示。如果不理會該信息,繼續執行程序,那么Visual C++自動將小數去除,只取整數部分輸出。

圖2-9 警告信息
2.3.2 字符型
字符型數據類型只占據1字節,其聲明關鍵字為char。同樣地,可以給其加上unsigned、singed修飾符,分別表示無符號字符型和有符號字符型。例如,下列語句定義一個有符號的字符型變量:
char ch;
上述語句定義的變量ch可取任意ASCII碼為-128~127的字符,在具體應用中使用較多的是ch中存儲大小寫字母。同樣地,聲明字符型常量需要注意:用一對單引號括起來的一個字符,單引號只是字符與其他部分的分割符,不是字符的一部分,并且不能用雙引號代替單引號。在單引號中的字符不能是單引號或反斜杠。例如:
‘a’ , ‘A’, ‘#’ //合法的字符常量 ‘’’ , ‘\’ //非法的字符常量 “A” //不代表字符常量
另一種表示字符常量的方法是使用轉義字符。C++規定,采用反斜杠后跟一個字母來代表一個控制字符,具有新的含義。此外,用一對雙引號括起來的一個或多個字符的序列稱為字符串常量或字符串。字符串以雙引號為定界符,雙引號不作為字符串的一部分。如:
“Hello”, “Good Morning!” ,“I say: \“ Goodbye!\””
字符串中的字符數稱為該字符串的長度,在存儲時,系統自動在字符串的末尾加以字符串結束標志,即轉義字符‘\0’。
【范例2-5】字符串數據類型的使用。該范例是一個使用了字符型數據類型的程序,在該程序中,定義了一個字符型變量,給其賦值后輸出,實現代碼如代碼清單2-5所示。
代碼清單2-5
1 # include <iostream.h> 2 void main() 3 { 4 char ch1; //聲明字符型變量 5 ch1 = 'a'; //賦值 6 cout<<"ch1= "<<ch1<<endl; //輸出 7 int ch2; //聲明字符型變量 8 ch2 = 'a'; //賦值 9 cout<<"ch2= "<<ch2<<endl; //輸出 10 }
【運行結果】在Visual C++中創建一個【C++ Source File】,將上述代碼輸入其中,輸出結果如圖2-10所示。

圖2-10 字符型數據類型
【范例解析】范例 2-5代碼中,定義了字符型數據ch1和整型數據ch2,都給其賦值為字符“a”,輸出后其結果不同,整型數據類型對應的變量ch2的輸出為97,這是因為字符型數據類型在計算機內部是轉換為整型數據類型來操作的,如上述代碼中的字母a,系統會自動將其轉換為對應的ASCII碼值97。
注意:大小寫英文字母所對應的ASCII值是不一樣的,小寫字母的對應的ASCII碼值大于大寫字母對應的ASCII值。
2.3.3 浮點型
浮點型數據類型亦即實數,當計算的表達式有精度要求時被使用。例如,計算平方根、正弦和余弦,它們的計算結果的精度要求使用浮點型。C++中有2種浮點型:單精度浮點型(float)及雙精度(double)浮點型。其主要區別在于占用的字節數不同,前者為4字節,后者為8字節。
單精度浮點型(float)專指占用32位存儲空間的單精度值。單精度在一些處理器上比雙精度更快,而且只占用雙精度一半的空間,但是當值很大或很小的時候,它將變得不精確。當用戶需要小數部分并且對精度的要求不高時,單精度浮點型的變量是有用的。下面是一個聲明單精度浮點型變量的例子:
float hightemp,lowtemp;
雙精度型(double),正如其關鍵字“double”表示的,占用64位的存儲空間。當用戶需要保持多次反復迭代的計算的精確性時,或在操作值很大的數字時,雙精度型是最好的選擇。例如,前面計算圓面積,聲明的常量和變量均為雙精度型,如下所示:
double radius,area;
【范例2-6】浮點型數據類型的使用。該范例是一個使用了浮點型數據類型的程序,在該程序中,定義了一個雙精度型變量,給其賦值后輸出,實現代碼如代碼清單2-6所示。
代碼清單2-6
1 # include <iostream.h> 2 void main() 3 { 4 double a; //聲明雙精度浮點型變量 5 a= 3.13564824; //賦值 6 cout<<a<<endl; //輸出 7 }
【運行結果】在Visual C++中創建一個【C++ Source File】,將上述代碼輸入其中,輸出結果如圖2-11所示。

圖2-11 浮點型數據類型
【范例解析】范例2-6代碼定義了一個雙精度浮點型變量a,并給其賦值后輸出。讀者可以看到,浮點型數據類型會對其精度進行取舍,例如,上述程序的輸出并不會輸出給定的變量a的完全值,而是進行了四舍五入。
提示:在Visual C++ 6.0中,使用較多的是double雙精度數據類型。
2.3.4 布爾型
布爾型是最簡單的數據類型,其只有兩個值:true和false。同樣地,聲明為布爾型的變量,是具有兩種邏輯狀態的變量,包含兩個值:真和假。
此外,如果要把一個整型變量轉換成布爾型變量時,其對應關系如下:
● 如果整型值為0,則其布爾型值為假(false)。
● 如果整型值為1,則其布爾型值為真(true)。
【范例2-7】布爾型數據類型的使用。該范例是一個布爾型數據類型的程序,在該程序中,定義了一個布爾型變量,并為其賦值true,讀者可觀察其作用,實現代碼如代碼清單2-7所示。
代碼清單2-7
1 # include <iostream.h> 2 void main() 3 { 4 double flag; //聲明布爾型變量 5 flag= true; //賦值 6 cout<<flag<<endl; //輸出 7 }
【運行結果】運行上述代碼后,其結果如圖2-12所示。

圖2-12 布爾數據類型
【范例解析】范例2-7代碼定義了布爾型變量flag,并給其賦值后輸出。讀者可以看到,其輸出并不是true,而是輸出整數值1,這是使用布爾數據類型需要注意的。
注意:如果在算術表達式中使用布爾型變量,那么將根據變量值的真假而賦予整型1或0。
除了上述介紹的4種基本數據類型外,C++還支持空值型(void)數據類型,這里就不再細述了,有興趣的讀者可參考相關文獻。
- 人工智能超越人類
- Getting Started with Clickteam Fusion
- 樂高機器人EV3設計指南:創造者的搭建邏輯
- Hands-On Cloud Solutions with Azure
- 傳感器技術應用
- Creo Parametric 1.0中文版從入門到精通
- 完全掌握AutoCAD 2008中文版:機械篇
- 具比例時滯遞歸神經網絡的穩定性及其仿真與應用
- RedHat Linux用戶基礎
- ESP8266 Robotics Projects
- 數字多媒體技術基礎
- 生成對抗網絡項目實戰
- 工業機器人集成應用
- 智能+:制造業的智能化轉型
- 樂高創意機器人教程(中級 上冊 10~16歲) (青少年iCAN+創新創意實踐指導叢書)