1. 程式人生 > >float類型的二進制表示方法

float類型的二進制表示方法

來源 xxxx text terminal min 計算 term 特殊 最大值

摘自:http://www.duote.com/tech/5/14691.html

根據國際標準IEEE 754,任意一個二進制浮點數V可以表示成下面的形式:
  V = (-1)^s×M×2^E
  (1)(-1)^s表示符號位,當s=0,V為正數;當s=1,V為負數。
  (2)M表示有效數字,大於等於1,小於2。
  (3)2^E表示指數。

IEEE 754規定,對於32位的浮點數,最高的1位是符號位s,接著的8位是階碼E,剩下的23位為有效數字M。

符號位S 階碼(E+偏移量) 尾數M
1位 8位 23位


(1)尾數M

前面說過,1≤M<2,也就是說,M可以寫成1.xxxxxx的形式,其中xxxxxx表示小數部分。IEEE 754規定,在計算機內部保存M時,默認這個數的第一位總是1,因此可以被舍去,只保存後面的xxxxxx部分。比如保存1.01的時候,只保存01,等到讀取的時候,再把第一位的1加上去。這樣做的目的,是節省1位有效數字。以32位浮點數為例,留給M只有23位,將第一位的1舍去以後,等於可以保存24位有效數字。

(2)階碼

階碼 = 指數 E+ 偏移量,這種階碼表示方式為移碼。據猜測在計算機中存儲的是階碼,實際求值的時候需要減去偏移量。

階碼為一個無符號整數(unsigned int)。這意味著,如果E為8位,它的取值範圍為0~255,但有下面的情況:

  • 當階碼為全0且尾數M也為全0時,表示的真值X為零,結合符號位S為0或1,有正零和負零之分。
  • 當階碼為全1且尾數M也為全0時,表示的真值X為無窮大(∞),結合符號位S為0或1,有+∞和-∞之分。如果M不全位0,表示這不是一個數(NaN)。

除去E用全0和全1(255)表示零和無窮大的特殊情況,因此,階碼的取值範圍變為1~254,為了表示小數,設置偏移量為127,那麽實際表達的數值的指數範圍為-126 ~ +127.

求浮點數最大表示的整數是多少:

那麽,根據X = (-1) s ×(1.M)×2 E-127 ,有 最大值為 (1.11111.....1)2 ×2127 =(1+1-2-23) ×2 127 = (2-2 -23) ×2 127 = 2128-2-104

作者:牛客2862122號
鏈接:https://www.nowcoder.com/questionTerminal/68eb1274b8ed4ead8d1b3b27a0c54b8b
來源:牛客網

float類型的二進制表示方法