【共讀Primer】7.[2.1] 基本內置類型(1) Page29

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++做爲一種強類型的語言,在類型的學習上必定要多下功夫,雖然內置類型不多,可是自定義類類型爲咱們開闢了無比廣闊的空間

相關文章
相關標籤/搜索