1. 程式人生 > >浮點數在計算機中的二進位制表示(IEEE 754 標準)

浮點數在計算機中的二進位制表示(IEEE 754 標準)

十進位制,二進位制轉換相關知識參考:

原碼,反碼,補碼,移碼相關知識參考:

想知道浮點數在計算機中的二進位制表示,先讓我們瞭解一下浮點數是怎麼用十進位制表示的。

浮點數的十進位制表示一般使用的是科學計數法。

科學記數法是一種記數的方法。把一個數表示成a與10的n次冪相乘的形式(1≤a<10,n為整數),這種記數法叫做科學記數法。

如:

1234.5 = 1.2345\times 10\times 10\times 10=1.2345 \times 10^{3}

當然上面使用的都是十進位制的科學計數法,而在計算機中使用的是二進位制的科學計演算法。

上面的等式轉換為二進位制表示如下:

10011010010.1 = 1.00110100101 \times 2^{10}

好了,現在大家知道浮點數是怎麼用二進位制科學計數法表示的了,下面我們再來看看浮點數在計算機中的二進位制表示。

我們先來看張圖:

如圖所示,即浮點數在計算機內的 IEEE 754 標準小端序的資料儲存格式,可以分為三部分——數符,階碼和尾數。

各部分佔位如下:

S(數符) E(階碼) M(尾數) 總長
float 1 8 23 32
double 1 11 52 64

數符,階碼和尾數具體是什麼呢?我們再來看張圖:

上面的公式就是浮點數的真值公式,我們來對應之前的資料儲存格式(數符,階碼和尾數)解釋一下:

S(數符):表示浮點數的正負,0為正,1為負。

M(尾數):表示轉換到標準二進位制科學計數法後的小數部分。因為轉換為標準計數法後整數部分永遠是1,所以可以省略。

E(階碼):表示處理過的二進位制科學計數法的冪次方。這裡e代表原冪次方,E(階碼)在這裡的處理是:

E=e+2^{n-1} -1  (n為階碼的位數)

即:

float:E = e + 127

double:E = e + 1023

還是拿上面的例子來說(使用單精度浮點數 float):

1.00110100101 \times 2^{10} = (-1)^{{\color{Red} 0}} \times(1.{\color{Red} 00110100101}) \times 2^{{\color{Red} 137}-127}

所以:

S = 0

E = e + 127 = 10 + 127 = 137 = 10001001 

M = 00110100101000000000000  (後面補 0 湊夠 23 位)

將 S、E、M 拼起來即為 1234.5 在計算機中的二進位制表示 01000100  10011010  01010000  00000000。

至此,我們就瞭解了浮點數在計算機中的二進位制表示。