Java 非整数数二进制表示法

Java 非整数数二进制表示法,java,binary,floating-point,bit-manipulation,Java,Binary,Floating Point,Bit Manipulation,java中浮点数的二进制表示方式如何? 例如,(5.34)的二进制表示是什么 谢谢。 如果参数为0x7FF0000000L,则结果为正无穷大 如果参数为0xfff0000000000000L,则结果为负无穷大 如果参数是0x7FF0000001L到0x7FFFFFFFFFFFFFL范围内或0xfff0000000000001L到0xFFFFFFFFFFFFFL范围内的任何值,则结果为NaN。Java提供的IEEE 754浮点操作无法区分具有不同位模式的同一类型的两个NaN值。只有使用Double

java中浮点数的二进制表示方式如何? 例如,(5.34)的二进制表示是什么

谢谢。

如果参数为0x7FF0000000L,则结果为正无穷大

如果参数为0xfff0000000000000L,则结果为负无穷大

如果参数是0x7FF0000001L到0x7FFFFFFFFFFFFFL范围内或0xfff0000000000001L到0xFFFFFFFFFFFFFL范围内的任何值,则结果为NaN。Java提供的IEEE 754浮点操作无法区分具有不同位模式的同一类型的两个NaN值。只有使用Double.doubleToRawLongBits方法才能区分NaN的不同值

在所有其他情况下,设s、e和m为可从参数计算的三个值:

ints=((位>>63)==0)?1 : -1;
int e=(int)((位>>52)和0x7ffL);
长m=(e==0)?

(位&0xFFFFFFFFFL)在外行术语中,浮点用2的幂表示。每个浮点有三个部分

  • 标志
  • 指数
  • 尾数
标志部分很简单。它有正负两种价值。使用尾数和指数近似表示的浮点值用于缩放它。有关示例,请参见。您的5.34值低于。请注意,这是近似值,正如您在下面看到的,您的数字不是5.34,而是5.340000152587891


副本似乎没有回答OP的问题,这是关于如何表示浮点,而不是如何进行转换。
int s = ((bits >> 63) == 0) ? 1 : -1;
int e = (int)((bits >> 52) & 0x7ffL);
long m = (e == 0) ?
             (bits & 0xfffffffffffffL) << 1 :
             (bits & 0xfffffffffffffL) | 0x10000000000000L;