Java Double.longBitsToDouble() 方法及代码示例

将给定的位形式的 long 型转换成 double 型.

定义

public static double longBitsToDouble(long bits)

参数

参数类型参数名称参数描述
longbits任意长整数

返回值

返回具有相同位模式的双精度浮点值

说明

参数根据 IEEE 754 (IEEE二进制浮点数算术标准) 浮点数的 "双格式" 位布局来被认定为浮点值的表示.

如果参数为 0x7ff0000000000000L, 则结果为正无穷.

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

如果参数是 0x7ff0000000000001L0x7fffffffffffffffL 范围内或 0xfff0000000000001L0xffffffffffffffffL 范围内的任何值, 则结果为 NaN. Java 提供的任何 IEEE 754 浮点运算都无法区分具有不同位模式的相同类型的两个 NaN 值. NaN 的不同值只能通过使用 Double.doubleToRawLongBits() 方法来区分.

注意事项

此方法可能无法返回与 long 参数具有完全相同的位模式的双精度 NaN. IEEE 754 区分了两种 NaN, 静默 NaN 和信令 NaN. 但这两种 NaN 之间的差异在 Java 中通常是不可见的. 信令 NaN 的算术运算能将它们变成静默的 NaN, 它们具有不同但通常相似的位模式. 但是, 在某些处理器上, 仅仅是复制信令 NaN 也会执行该转换. 特别是, 复制一个信令 NaN 以将其返回给调用方法可以执行此转换. 因此 longBitsToDouble() 可能无法返回带有信令 NaN 位模式的双精度数. 因此, 对于某些 long 值, 则可能有 doubleToRawLongBits(longBitsToDouble(start)) 不等于 start. 此外, 哪些特定的位模式代表信令 NaN 取决于平台; 尽管所有 NaN 的位模式, 无论安静或信令都必须在上面确定的 NaN 范围内.

示例

将给定的位形式的 long 型转换成 double 型的示例

package com.yi21.Double;

public class Yi21DoubleLongBitsToLong {

    public static void main(String[] args) {
        
        long bits = 0x7ff0000000000000L;
        System.out.println(bits + " 的浮点型表示为: " + Double.longBitsToDouble(bits));

        bits = 0xfff0000000000000L;
        System.out.println(bits + " 的浮点型表示为: " + Double.longBitsToDouble(bits));

        bits = 0x7ff0000000000001L;
        System.out.println(bits + " 的浮点型表示为: " + Double.longBitsToDouble(bits));

        bits = 1L;
        System.out.println(bits + " 的浮点型表示为: " + Double.longBitsToDouble(bits));

    }

}

执行结果为 :

9218868437227405312 的浮点型表示为: Infinity
-4503599627370496 的浮点型表示为: -Infinity
9218868437227405313 的浮点型表示为: NaN
1 的浮点型表示为: 4.9E-324