C++的數據類型是用來對內存的指定區域描述含義及可執行操做的。html
類型 | 含義 | 最小尺寸 |
bool | 布爾類型 | 未定義 |
char | 字符 | 8位 |
wchar_t | 寬字符 | 16位 |
char16_t | Unicode字符 | 16位 |
char32_t | Unicode字符 | 32位 |
short | 短整形 | 16位 |
int | 整型 | 16位 |
long | 長整型 | 32位 |
long long | 長整型(C++11) | 64位 |
float | 單精度浮點數 | 6位有效數字 |
double | 雙精度浮點數 | 10位有效數字 |
long double | 擴展精度浮點數 | 10位有效數字 |
有效數字:一個數學概念具體講就是 從左邊第一個不是0的數字起,到末位數止,這中間全部的數字都叫這個近似數字的有效數字
ios
wchar_t、char16_t、char32_t都是用來放字符的,其實字符也頗有意思,我會專門寫一個篇外篇來說述一下 感興趣的能夠看一下 https://www.cnblogs.com/ChattyKu/p/9408260.html程序員
全部內置類型都列出來了,並無多少。算法
好像一張表已經表示了全部,沒有更多的知識點了。然而更重要的是下面的內容,甚至比類型都重要。佈局
首先說說這些類型是怎麼放在內存中的學習
(別說你不想了解,它就好像不一樣材質的杯子具備不一樣的特性,玻璃杯子一摔就破,而塑料或者金屬的則不存在這種風險。這種認知是基於你對材料特性的瞭解而得出的)spa
如何將它們解釋爲不一樣的類型3d
首先,全部的信息都存儲在內存或硬盤中,先來看看它們什麼樣指針
在程序員眼中,內存是無數個小房子(數量大小取決於你的內存容量)code
每一個房子只有兩種可能 0 或者 1
要訪問這些房子,就須要房子的門牌號碼,而這個門牌號就是咱們所說的內存地址
地址有了,就能夠獲取或者修改房子裏的東西了
等等,不是說只有0或1麼,哪來的其餘的東西。
而後,對於C++而言,類型決定了如何去解讀一段內存。
類型決定了它所佔的大小以及解讀的方式
就像一個笑話 胸前的口袋,裝一支筆學生,裝兩支筆會計,裝三支筆教授,裝四支筆賣筆的商販
而今天咱們讀到的類型就是用來解釋內存的一種規定。
來看看用不一樣的類型解讀一段相同的內存會有什麼不一樣
1 #include <iostream> 2 3 int main() 4 { 5 int a = 58; 6 void* pa = &a; 7 std::cout << "bool:" << *(bool*)pa // 強制將指針轉換爲指定的類型,不通過系統的類型轉換機制,直接扭轉一段內存的類型屬性 8 << "\nchar:" << *(char*)pa 9 << "\nwchar_t:" << *(wchar_t*)pa 10 << "\nchar16_t:" << *(char16_t*)pa 11 << "\nchar32_t:" << *(char32_t*)pa 12 << "\nshort:" << *(short*)pa 13 << "\nint:" << a 14 << "\nlong:" << *(long*)pa 15 << "\nlong long:" << *(long long*)pa 16 << "\nfloat:" << *(float*)pa 17 << "\ndouble:" << *(double*)pa 18 << "\nlong double:" << *(long double*)pa ; 19 return 0; 20 }
另外告訴你們一個祕密,這個代碼每次運行的結果都不是徹底同樣的
緣由在於咱們使用int進行初始化,因此序號1 2 3 4四行被按照要求初始化了,可是序號4 5 6 7 四行的內存空間值是隨機的
當類型的解析大於4個字節(也就是32位)的時候,值就會變成一個不可預測的值
其實關於內存佈局,還有一些有意思的事情,我會單獨寫文章來講說他們
在C++中還有一個重要的類型描述,有符號和無符號
使用signed和unsigned 來表示,不寫默認就是signed因此在代碼中咱們通常只會看到unsigned
是否帶有符號則決定了類型的表示範圍
char這個類型,帶符號表示-128 - 127,無符號表示 0 - 255
這裏得出這個結果很是簡單,char由8個位組成,八個0和1一共有256(2的8次方)種不一樣的組合,因此能表示的數一共256個
其餘的類型也能夠經過相似的算法來得出表示範圍。
接下來要敲黑板、劃重點了
請記住並儘可能去運用下面關於類型選擇的一些建議
1. 當明確知曉數值不可能爲負值時,選用無符號類型
2. 使用int進行整數計算。由於它與機器字長相同,因此效率最高
3. 計算表達式中不要使用char 或bool。由於char在不一樣的機器上是否有符號也不一樣,在C++標準中並無強制規定
4. 浮點運算請使用double,緣由與2相同
內置類型以及類型的做用差很少就這些
其實在C++做爲一種強類型的語言,在類型的學習上必定要多下功夫,雖然內置類型不多,可是自定義類類型爲咱們開闢了無比廣闊的空間