本文不會講解浮點數的表示原理,閱讀前請先補充前置知識,能夠先讀讀這幾篇文章: zh.wikipedia.org/wiki/IEEE_7… www.ruanyifeng.com/blog/2010/0…html
下面分別以 -0.2 和 9.1 爲例來推導浮點數的二進制表示,這裏只討論單精度,雙精度的推導方式是相似的。vue
將一個整數轉爲二進制的方法比較簡單:1. 該整數除以 2 獲得商和餘數,餘數做爲低位;2. 將商做爲整數繼續重複 1。web
因此 9.1 的整數部分轉換過程以下:工具
將餘數從右往左收集起來就獲得了 9.1 的整數部分的二進制表示方法:1001cdn
將一個小數轉爲二進制的方法跟整數相似,只不過除法要換成乘法:1. 該整數乘以 2 獲得積,若是大於等於 1,則二進制位爲 1,不然爲 0;2. 若積大於等於 1,則減去 1,新的數繼續重複步驟 1,不然原來的積繼續重複步驟1。htm
因此 -0.2 和 9.1 的小數部分分別表示以下 (左邊是高位,右邊是低位):blog
-0.2:ip
.00110011001100110011001100 = 1.10011001100110011001100×2^(-3)內存
9.1:get
1001.00011001100110011001100 = 1.00100011001100110011001×2^(3)
獲得二進制的科學技術表示法後,浮點數的三要素就好計算了:
s | f | e | |
---|---|---|---|
-0.2 | 1 | 10011001100110011001100 | -3 + 127 = 124 = 01111100 |
9.1 | 0 | 00100011001100110011001 | 3 + 127 = 130 = 10000010 |
最後,把三要素連在一塊兒獲得兩個數在內存中的實際存儲模型:
-0.2
9.1
最後附上幾個在線獲取二進制表示的小工具: