5分鐘講清楚浮點數的底層表示

浮點數的二進制表示,基本上就是用二進制的科學計數法來表示。

一個十進制的數0.75,用科學計數法表示是+7.5*10^-1,分爲3個部分,正負號、7.5和-1。

其中小數點前的部分,一定是一個1-9之間的數。也就是你不能寫成+75*10^-2。

好了,換成2進制(以下均以float類型爲例),由於它佔用的位數有限(一般是32位),因此我們需要仿照十進制科學計數法的方式,把這些位切分爲3部分。

符號只有正負,因此用1位表示。

指數和尾數部分的劃分決定了數字能表示的最大值和精度。IEEE的標準,指數位是8位,剩下是尾數位。

8位可以表示的範圍是0到255,或者-127到+128,爲了能表示2^-1的概念,選擇後者。

尾數的精髓在於跟十進制的表示一樣,剛纔說十進制的小數點之前是1-9,那麼二進制的小數點之前一定有一個1。

二進制轉十進制

以下面這一串比特位爲例:

0-01111110-10000000000000000000000

0是符號位,代表正數。

中間是指數位,寫成十進制是126,減去127之後得到-1。

最後是尾數,忽略末尾的0,同時在小數點前補1,得到1.1,轉成十進制是1.5。

我們把三個部分拼起來,得到+1.5*2^-1=0.75

十進制轉二進制

以2.75爲例子,先把小數點前後都寫成二進制形式,得到10.11。

10.11*2^0不滿足要求,爲了讓小數點前的數是1,所以我們向左挪一下小數點,得到1.011*2^1。

(上面這步和把75*10^0寫成7.5*10^1是一個意思)

最後我們把3個部分提取出來,分別是符號位0,指數位1+127=10000000,尾數位0110…

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章