下面這張表是C++支持的基本數據類型ios
類型 | 含義 | 最小尺寸 |
bool | 布爾 | 未定義 |
char | 字符 | 8位 |
wchar_t | 寬字符 | 16位 |
char16_t | Unicode字符 | 16位 |
char32_t | Unicode字符 | 32位 |
short | 短整型 | 16位 |
int | 整型 | 16位 |
long | 長整型 | 32位 |
long long | 長整型 | 64位 |
float | 單精度浮點數 | 6位有效數 |
double | 雙精度浮點數 | 10位有效數字 |
long double | 擴展精度浮點數 | 10位有效數字 |
C++語言規定,一個int至少和一個short同樣大,一個long至少和一個int同樣大,一個long long至少和一個long同樣大。其中,long long是C++11新定義的類型。spa
一般short類型佔16位(16比特),那麼它的範圍就是(-32768~32767)。指針
一般int類型佔32位(1個字,32比特),那麼它的範圍就是(-2^31~2^31-1)。code
一般long類型佔64位(64比特),那麼它的範圍就是(-2^63 ~ 2^63-1)。blog
一般float類型佔32位(1個字,32比特),它的精度爲7位。字符串
一般double類型佔64位(2個字,64比特),它的精度爲15位。編譯器
#include <iostream> #include <limits> using namespace std; int main(){ cout << "type:char\n"; cout << "bytes = " << sizeof(char) << "\n\n"; cout << "type:short\n"; cout << "bytes = " << sizeof(short) << "\n"; cout << "smallest value = " << numeric_limits<short>::min() << "\n"; cout << "largest value = " << numeric_limits<short>::max() << "\n\n"; cout << "type:int\n"; cout << "bytes = " << sizeof(int) << "\n"; cout << "smallest value = " << numeric_limits<int>::min() << "\n"; cout << "largest value = " << numeric_limits<int>::max() << "\n\n"; cout << "type:long"; cout << "bytes = " << sizeof(long) << "\n"; cout << "smallest value = " << numeric_limits<long>::min() << "\n"; cout << "largest value = " << numeric_limits<long>::max() << endl; return 0; }
輸出結果爲:it
type:char
bytes = 1
type:short
bytes = 2
smallest value = -32768
largest value = 32767
type:int
bytes = 4
smallest value = -2147483648
largest value = 2147483647
type:longbytes = 8
smallest value = -9223372036854775808
largest value = 9223372036854775807
除了上面的這些基本數據類型,其中整型能夠劃分爲帶符號的(signed)和無符號的(unsigned)兩種。帶符號的能夠表示整數、負數和0,無符號的只能表示非負數。io
short、int、long、long long表示有符號的,在它們的前面加上unsigned表示無符號的:unsigned short、unsigned int、unsigned long、unsigned long long。編譯
無符號(unsigned)因爲沒有負數,因此取值範圍和帶符號(signed)的也不一樣:
unsigned short :0~2^16 - 1
unsigned int :0~2^32 - 1
unsigned long :0~2^64 -1
注意:浮點數(float和double)沒有無符號的。
在上面知道了signed和unsigned的取值範圍不一樣,而且unsigned不能爲負數。
那麼若是故意給unsigned一個負數,會發生什麼呢,編譯器會報錯嗎?答案是不會,編譯器會認爲你所作的含有特殊的含義,編譯器不會干涉你。
那麼負的unsigned轉化爲正的unsigned的規則是什麼呢?
規則:結果值等於這個負數加上數據類型unsigned的模。
#include <iostream> using namespace std; int main(){ unsigned int n = -10; cout << "n = " << n << endl; return 0; }
輸出的結果值:
n = 4294967286
因爲unsigned int的模爲2^32(4294967296),2^32+(-10)就是4294967286。
unsigned short 的模爲2^16。
unsigned int 的模爲2^32。
unsigned long 的模爲2^64。
這樣以來的話,那麼一個正的unsigned能夠和一個負的unsigned(轉化後爲正的)相等。
unsigned int m = 4294967295;
unsigned int n = -1;
那麼 m == n 結果爲true。-1轉化後剛好是4294967295。
以0開頭的整數表示八進制,以0x或0X開頭的整數表示十六進制。
浮點型字面值默認是一個double類型。
換行 | \n | 橫向製表符 | \t |
縱向製表符 | \v | 退格符 | \b |
反斜線 | \\ | 問號 | \? |
回車符 | \r | 進紙符 | \f |
警報 | \a | 單引號 | \' |
雙引號 | \" |
前綴 | 含義 | 類型 |
u | Unicode16字符 | char16_t |
U | Unicode32字符 | char32_t |
L | 寬字符 | wchar_t |
u8 | UTF-8 | char |
後綴 | 類型 |
u or U | unsigned |
l or L | long |
ll or LL | long long |
後綴 | 類型 |
f or F | float |
l 或 L | long double |
nullptr是指針字面值
例如:
L'a' //wchar_t類型 42ULL //unsigned long long 類型 1E-3F //float類型 3.14L //long double類型