浮點數的二進制表示

單精度浮點數float32和雙精度浮點數float64的二進制表示方法類似,以float64爲例,二進制位如圖html

 

sign bit(符號): 用來表示正負號,0表明數值爲正,1表明數值爲負。spa

exponent(指數): 用來表示次方數htm

mantissa(尾數): 用來表示精確度blog

 

一個雙精度浮點數所表明的數值爲:(-1)sign × 2exponent - 0x3ff × 1.mantissaget

0 ≤ exponent ≤ 0x7ff,- 0x3ff 稱爲偏正值,使指數便可正亦可負。it

 

爲何不用符號位1bit + 數值位10bit表示形式呢?io

答:爲了簡化比較。由於,指數的值可能爲正也可能爲負,若是採用補碼表示的話,全體符號位S和Exp自身的符號位將致使不能簡單的進行大小比較。正由於如此,指數部分一般採用一個無符號的正數值存儲table

 

sign exponent mantissa 數值
0 000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0.0
1 000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 -0.0
0 000 0000 0000 不爲0 下溢數
0 111 1111 1111 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 無窮大
0 111 1111 1111 不爲0 NaN
0 011 1111 1111 1000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1.5

 

 

 

 

 

 

注:二進制

  • float類型能夠表示正零值和負零值
  • mantissa從左到右第N位表示2-N,例如1.5的二進制表示。

int64與相等float64的二進制關聯

二進制 數值

0000 0000 0000 0000 0000 0000 0000 0000float

0000 0000 0000 0000 0000 0010 0010 1011

555

0100 0000 1000 0001 0101 1000 0000 0000

0000 0000 0000 0000 0000 0000 0000 0000

555.0

int64最高非零位之後的二進制位 === float64 mantissa,因此float64能夠不損失精度表示的最大int64範圍是-253 ~ 253,253+1就無法表示了。然而,諸如253+2一類的int64仍然能夠不損失精度地用float64表示。

相關文章
相關標籤/搜索