float類型的二進制表示方法
摘自: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類型的二進制表示方法