爲什麼32位浮點數1.0f的二進制表示爲3f800000?

32位浮點數構成:1位符號位,8位階碼,23位尾數。符號位指示尾數的正負。階碼自身通過固定偏移表示正負。

1.0f的二進制表示爲3f800000,

即0 01111111 00000...

其中1位符號位爲0,表示正數。8位階碼爲01111111,即127,根據IEEE754標準,從二進制階碼轉化爲實際指數,需要減去固定偏移2^7-1,即127,所以實際指數爲127-127=0。尾數部分的1爲規約形式的浮點數的一位隱含的二進制有效數字,這裏未出現,其他23位尾數這裏爲全0。

那麼1.0f = + 1 * 2^0

0.0f的二進制表示爲00000000

其中1位符號位爲0,表示正數。8位階碼和23位尾數均爲全0,根據IEEE754標準,爲非規約形式的浮點數 0 的表示方法(其實你也可以粗略理解爲實際指數爲-127所以很接近零)。

那麼0.0f = 0

階碼用固定偏移而不用補碼的原因,是指數連續性、便於比較大小、正規形式和非正規形式的平滑轉變。

而非規約形式的浮點數可以實現漸進式下溢出。

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