2014-11-23 52 views
-1

在java中浮點數的二進制表示如何?例如,什麼是(5.34)的二進制表示。非整數數字二進制表示

謝謝。

+0

http://en.wikipedia.org/wiki/IEEE_floating_point – 2014-11-23 23:00:13

+0

http://babbage.cs.qc.cuny.edu/IEEE-754.old/Decimal.html – 2014-11-23 23:01:15

+0

重複的不似乎回答了OP的問題,即關於浮點如何表示的問題,而不是如何進行轉換。 – 2014-11-23 23:03:26

回答

0

https://docs.oracle.com/javase/7/docs/api/java/lang/Double.html#longBitsToDouble(long)

如果參數爲0x7ff0000000000000L,結果是正無窮大。

如果參數是0xfff0000000000000L,結果是負無窮大。

如果參數是0x7ff0000000000001L到0x7fffffffffffffffL範圍內的任何值,或者範圍是0xfff0000000000001L到0xffffffffffffffffL,則結果是NaN。 Java提供的IEEE 754浮點操作不能區分具有不同位模式的相同類型的兩個NaN值。 NaN的不同值只能通過使用Double.doubleToRawLongBits方法來區分。

在所有其他情況下,令s,e和m爲可以從以下參數計算的三個值:

int s = ((bits >> 63) == 0) ? 1 : -1; 
int e = (int)((bits >> 52) & 0x7ffL); 
long m = (e == 0) ? 
      (bits & 0xfffffffffffffL) << 1 : 
      (bits & 0xfffffffffffffL) | 0x10000000000000L; 

然後浮點結果等於數學的值表達s·m·2 e-1075

轉換可以反向完成。對於「正常」數字x,令s爲數值的符號,e爲底數(log2(x))+ 1075,並且m從x/2變爲四捨五入,並且適當地移位值:s是高位,e是接下來的11位,m是剩餘的52位。

0

通俗地說浮點數用2的冪來表示。每個浮點都有三部分。

  • 註冊
  • 指數
  • 尾數

登錄部分很簡單。它具有負面和正面的價值。大約使用尾數和指數表示的浮點值用於對其進行縮放。示例請參見following site。您的5.34價值低於。請注意,這是近似值,如下圖所示,您的數字不是5.34,而是5.340000152587891。

enter image description here