Java Double.doubleToRawLongBits()

根据 IEEE 754 (IEEE二进制浮点数算术标准) 浮点数的 "双格式" 位布局返回指定浮点值的表示, 但与 doubleToLongBits() 不同, 如果参数是 NaN, 本方法则返回一个表示长整型 NaN 的长整数.

初见版本

1.3

定义

public static long doubleToRawLongBits(double value)

参数

参数类型参数名称参数描述
doublevalue一个双精度浮点数

返回值

返回表示浮点数的位的长整数.

说明

第 63 位 (由掩码 0x8000000000000000L 选择的位) 表示浮点数的符号. 第 62-52 位(由掩码 0x7ff0000000000000L 选择的位) 表示指数. 第 51-0 位(由掩码 0x000fffffffffffffL 选择的位) 表示浮点数的有效位(有时称为尾数).

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

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

如果参数为 NaN, 则结果为是表示实际 NaN 值的长整数

结果始终都是一个长整数,, 当将它提供给 longBitsToDouble(long) 方法时, 将产生一个与 doubleToRawLongBits 的参数相同的浮点值.

注意事项

本方法不是用于做类型 double 到 long 的强制转换, 这只是一种符合规范的表示方法.

示例

获取 double 的长整型位表示的示例

package com.yi21.Double;

public class Yi21DoubleDoubleToRawLongBits {

    public static void main(String[] args) {
        
        myDoubleToLongBits(Double.NaN);
        myDoubleToLongBits(Double.NEGATIVE_INFINITY);
        myDoubleToLongBits(Double.POSITIVE_INFINITY);
        myDoubleToLongBits(0.0);
        myDoubleToLongBits(-0.0);
        myDoubleToLongBits(1);

    }

    private static void myDoubleToLongBits(double d) {
        long l = Double.doubleToRawLongBits(d);
        System.out.println(d + " 的长整型位表示:" + l);
        System.out.println("longBitsToDouble 还原值: " + Double.longBitsToDouble(l));
    }

}

执行结果为 :

NaN 的长整型位表示:9221120237041090560
longBitsToDouble 还原值: NaN
-Infinity 的长整型位表示:-4503599627370496
longBitsToDouble 还原值: -Infinity
Infinity 的长整型位表示:9218868437227405312
longBitsToDouble 还原值: Infinity
0.0 的长整型位表示:0
longBitsToDouble 还原值: 0.0
-0.0 的长整型位表示:-9223372036854775808
longBitsToDouble 还原值: -0.0
1.0 的长整型位表示:4607182418800017408
longBitsToDouble 还原值: 1.0