java中浮点数的二进制表示如何? 例如,(5.34)的二进制表示是什么。
感谢。
答案 0 :(得分: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
为floor(log2(x))+ 1075,m
从x / 2 e ,并适当地移动值:s
是高位,e
是接下来的11位,m
是剩余的52位。
答案 1 :(得分:0)
在外行人看来,浮点数用2的幂表示。每个浮点都有三个部分。
签名部分很简单。它具有负面和正面价值。您的浮点值大致使用尾数表示,而exponent用于缩放它。有关示例,请参阅following site。您的5.34值低于。请注意,它是近似值,如下所示,您的数字不是5.34而是5.340000152587891。