基本數據類型是C++最基本的內容,雖然各種計算機語言的基本數據類型的含意和用法大體相同,但各種語言下基本數據類型的字節大小,數值范圍等是不一樣的,這也是程序開發都必須要了解的。
Java中有8種基本的數據類型,詳細內容請參見《Java中的50個關鍵字》 ,C++中基本數據類型的各類就多了。詳細如下:
C++中,基本數據類型也稱內置類型,有算術類型和空類型。空類型(void)沒有具體的值,只用於某些特殊的場合,如函數的返回值void。算術類型有整形數、浮點數、布爾類型和字符。
下表列出了C++標准規定的尺寸的最小值,C++標准只給定了尺寸的最小值,同時允許編譯器賦予這些類型更大的尺寸。所以同一個數據類型在不同平台不同操作系統下尺寸大小有可能不同。
C++:算術類型
分類
類型
含義
最小尺寸
整形數
short
短整形
16位
int
整形
16位
long
長整形
32位
long long
長長整形
64位
浮點數
float
單精度浮點數
6位有效數字
double
雙精度浮點數
10位有效數字
long double
擴展精度浮點數
10位有效數字
布爾類型
bool
布爾類型
未定義
字符
char
字符
8位
wchar_t
寬字符
16位
char16_t
16位unicode字符
16位
char32_t
32位unicode字符
32位
我在win7 x64系統上用VS2010和VS2013上測試了一下以上各種數據類型的大小如下:
void sizeTest() { cout << "short:\t\t" << sizeof(short) << endl; cout << "int:\t\t" << sizeof(int) << endl; cout << "long:\t\t" << sizeof(long) << endl; cout << "long long:\t" << sizeof(long long) << endl; cout << "float:\t\t" << sizeof(float) << endl; cout << "double:\t\t" << sizeof(double) << endl; cout << "long double:\t" << sizeof(long double) << endl; cout << "bool:\t\t" << sizeof(bool) << endl; cout << "char:\t\t" << sizeof(char) << endl; cout << "wchar_t:\t" << sizeof(wchar_t) << endl; cout << "char16_t:\t" << sizeof(char16_t) << endl; cout << "char32_t:\t" << sizeof(char32_t) << endl; }
結果為:
這裡上面的int就是4個字節32位,大於標准規定的16位。
short、int、long、long long、char都有帶符號和無符號兩種。帶符號的(signed)類型可以表示正數、負數和0,short、int、long、long long、char默認都帶符號的。無符號的(unsigned)類型則只能表示正數和0,只需要在對應的類型名前面加unsigned,如unsigned int和unsigned char。在計算機中數值是以二進制的形式存儲的,帶符號的類型第一位是符號位,用於表示正負數,1表示負數,0表示正數;無符號的類型沒有符號位,所有位數都用於表示數值的大小。如以short類型的為例:
7表示成如下
00000000 00000111
-7表示:
10000000 00000111
假設一個數據類型的尺寸大小為n位,則帶符號的表示的數值范圍是-2n-1—2n-1-1; 無符號的表示的數值范圍是0—2n-1.
bool是用於表示正確(true)和錯誤(false)的一種邏輯類型,其中true和false是一種標識符,應該是一種宏定義,true為1,false為0。在程度中整數和浮點數都可以給bool類型的變量賦值,但只有當值為0時表示假,非0時都表示真。如下:
void BoolTest() { bool b1 = true; bool b2 = false; bool b3 = 0; bool b4 = 1; bool b5 = 5; bool b6 = -8; bool b7 = 1.25; cout << "true:\t" << true << endl; cout << "false:\t" << false << endl; cout << "b1:\t" << b1 << endl; cout << "b2:\t" << b2 << endl; cout << "0:\t" << b3 << endl; cout << "1:\t" << b4 << endl; cout << "5:\t" << b5 << endl; cout << "-8:\t" << b6 << endl; cout << "1.25:\t" << b7 << endl; }
結果為:
true: 1
false: 0
b1: 1
b2: 0
0: 0
1: 1
5: 1
-8: 1
1.25: 1
在程度中常常能看到short int,是否又有什麼不同呢?short和short int應該是等價的,short應於修飾int,short是short int的簡寫。還有long和long int也是等價的。
如下程度:
short st1 = 10; short int st2 = 10; long l1= 20; long int l2 = 20; cout << st1 << endl; cout << st2 << endl; cout << l1 << endl; cout << l2 << endl; cout << "short:\t\t" << sizeof(short) << endl; cout << "shot int:\t" << sizeof(short int) << endl; cout << "long:\t\t" << sizeof(long) << endl; cout << "long int:\t" << sizeof(long int) << endl;
結果如下:
10
10
20
20
short: 2
shot int: 2
long: 4
long int: 4