理解浮點數的構成我的以爲對於新手是一個比較困難的事,我就想了很久,看了好幾篇參考資料,才大概弄清。。。spa
下面就說一下本身的理解吧~code
關於單精度浮點型的構造:內存
通常6-8位有效數字(假設float佔4個字節,一個符號位,8個指數位,23個尾數。
ci
上面給出了浮點數的表示方法,6-8位有效數字大概就是10^6到10^8個數(通常超過7位就四捨五入了),這個與編譯器有關。其實,也就是說float裏面有2^23=83886087個數,對應大概能表示10^6—10^8個數。一個符號位就是正負的符號0或1,還有8個指數位因爲有正負也就是-127~128。編譯器
說道這裏,你們感受多是懂了,不過頗有可能仍是沒懂。編譯
我給出問題,float能表示的大概的範圍-3.4E38~3.4E38,這個數又是怎麼來的? table
咱們知道計算機是以二進制來存取數據的,二進制也有其對應的浮點數形式。好比,1001.101.轉換成10進制就是9.625.而對於IEEE標準要求浮點數必須是規範的,小數點左側必須爲1.這樣,就變爲1.001101*2^3(這裏要注意,沒錯,二進制的科學技術法就是2的n次冪)。因此,對應的32爲表示以下。擴展
符號位0|指數冪 10000010|尾數 00110100000000000000000數據類型
這裏咱們看到尾數第一個1省略了,由於IEEE規定了小數點第一位是1,因此能夠將這個符號位添加到後面來保存更多的數據。二進制
指數位是這樣理解的,由於浮點數2進制的指數範圍爲-127~128,而8位2進制數能表示的數的範圍0-255(無符號數,不要把這個指數冪當成有符號數),因此這裏要有一個誤差(須要多思考一下)好比,當實際的指數值爲0的時候,在2進制的指數位表示爲127(實際值=e—127).因此,當實際值爲3的時候,e=130(也就是指數位爲130,10000010)
最後再舉一個例子,
-6.5
符號位1|指數冪 10000001|尾數 10101000000000000000000
如今應該知道那個範圍是怎麼算出來的吧,
截圖就是2^128的結果(浮點數的大體範圍由指數位來決定)。
(說的可能仍是有點混亂,以後若是更好的解釋思路回來修改一下)
下面是一個C++中有關基本數據類型的表格:
類型 |
含義 |
最小尺寸 |
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-8位有效數字(假設float佔4個字節,一個符號位,8個指數位,23個尾數。2^23=83886087位,2^8<=>(-128~128)\ Float表示-2^128~2^128 內存中 符號位[]+(只存放指數)指數位[][][][][][][][]+尾數[]*23) |
double |
雙精度浮點型 |
10位有效數字 |
long double |
擴展精度浮點型 |
10位有效數字 |