為便于軟件的移植,浮點數的表示形式應該有統一標準(定義)。1985年IEEE(Institute of Electrical and Electronics Engineers)提出了IEEE754標準。該標準規定基數為2,階碼E用移碼(非標準移碼,標準移碼與補碼的符號位相反,而非標準移碼要再減一)[1]表示,尾數M用原碼表示,根據二進制的規格化方法,數值的最高位總是1,該標準將這個1缺省存儲,使得尾數表示范圍比實際存儲的多一位。IEEE754標準中有三種形式的浮點數:短浮點數(又稱單精度浮點數)、長浮點數(又稱雙精度浮點數)、臨時浮點數(又稱擴展精度浮點數,這種浮點數沒有隱含位),它們的具體格式如下表:
類型
存儲位數
偏置值
數符(S)
階碼(E)
尾數(M)
總位數
十六進制
十進制
短浮點數(Single,float)
1位
8位
23位
32位
7FH
+127
長浮點數(Double)
1位
11位
52位
64位
3FFH
+1023
臨時浮點數(擴展精度浮點數)
1位
15位
64位
80位
3FFFH
+16383
對于階碼為0或255的情況,IEEE754標準有特別的規定:
如果 E 是0 并且 M 是0,則這個數的真值為±0(正負號和數符位有關) 如果 E = 255 并且 M 是0,則這個數的真值為±∞(同樣和符號位有關) 如果 E = 255 并且 M 不是0,則這不是一個數(NaN)。
短浮點數和長浮點數(不含臨時浮點數)的存儲在尾數中隱含存儲著一個1,因此在計算尾數的真值時比一般形式要多一個整數1。對于階碼E的存儲形式因為是127的偏移,所以在計算其移碼時與人們熟悉的128偏移不一樣,正數的值比用128偏移求得的少1,負數的值多1,為避免計算錯誤,方便理解,常將E當成二進制真值進行存儲。例如:將數值-0.5按IEEE754單精度格式存儲,先將-0.5換成二進制并寫成標準形式:-0.5(10進制)=-0.1(2進制)=-1.0×2-1(2進制,-1是指數),這里s=1,M為全0,E-127=-1,E=126(10進制)=01111110(2進制),則存儲形式為:
1 01111110 000000000000000000000000=BF000000(16進制)
這里不同的下標代表不同的進制。