浮點數在計算機中的二進位制表示(IEEE 754 標準)
十進位制,二進位制轉換相關知識參考:
原碼,反碼,補碼,移碼相關知識參考:
想知道浮點數在計算機中的二進位制表示,先讓我們瞭解一下浮點數是怎麼用十進位制表示的。
浮點數的十進位制表示一般使用的是科學計數法。
科學記數法是一種記數的方法。把一個數表示成a與10的n次冪相乘的形式(1≤a<10,n為整數),這種記數法叫做科學記數法。
如:
當然上面使用的都是十進位制的科學計數法,而在計算機中使用的是二進位制的科學計演算法。
上面的等式轉換為二進位制表示如下:
好了,現在大家知道浮點數是怎麼用二進位制科學計數法表示的了,下面我們再來看看浮點數在計算機中的二進位制表示。
我們先來看張圖:
如圖所示,即浮點數在計算機內的 IEEE 754 標準小端序的資料儲存格式,可以分為三部分——數符,階碼和尾數。
各部分佔位如下:
S(數符) | E(階碼) | M(尾數) | 總長 | |
float | 1 | 8 | 23 | 32 |
double | 1 | 11 | 52 | 64 |
數符,階碼和尾數具體是什麼呢?我們再來看張圖:
上面的公式就是浮點數的真值公式,我們來對應之前的資料儲存格式(數符,階碼和尾數)解釋一下:
S(數符):表示浮點數的正負,0為正,1為負。
M(尾數):表示轉換到標準二進位制科學計數法後的小數部分。因為轉換為標準計數法後整數部分永遠是1,所以可以省略。
E(階碼):表示處理過的二進位制科學計數法的冪次方。這裡e代表原冪次方,E(階碼)在這裡的處理是:
(n為階碼的位數)
即:
float:E = e + 127
double:E = e + 1023
還是拿上面的例子來說(使用單精度浮點數 float):
所以:
S = 0
E = e + 127 = 10 + 127 = 137 = 10001001
M = 00110100101000000000000 (後面補 0 湊夠 23 位)
將 S、E、M 拼起來即為 1234.5 在計算機中的二進位制表示 01000100 10011010 01010000 00000000。
至此,我們就瞭解了浮點數在計算機中的二進位制表示。