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
階碼用固定偏移而不用補碼的原因,是指數連續性、便於比較大小、正規形式和非正規形式的平滑轉變。
而非規約形式的浮點數可以實現漸進式下溢出。