浮點數的二進制表示


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

 

sign bit(符號): 用來表示正負號,0代表數值為正,1代表數值為負。

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

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

 

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

0 ≤ exponent ≤ 0x7ff,- 0x3ff 稱為偏正值,使指數即可正亦可負。

 

為什么不用符號位1bit + 數值位10bit表示形式呢?

答:為了簡化比較。因為,指數的值可能為正也可能為負,如果采用補碼表示的話,全體符號位S和Exp自身的符號位將導致不能簡單的進行大小比較。正因為如此,指數部分通常采用一個無符號的正數值存儲

 

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 0000

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表示。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM