Java Double.doubleToLongBits()

根据 IEEE 754 (IEEE二进制浮点数算术标准) 浮点数的 "双格式" 位布局返回指定浮点值的表示.

定义

public static long doubleToLongBits(double value)

参数

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

返回值

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

说明

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

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

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

如果参数为 NaN, 则结果为 0x7ff8000000000000L.

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

注意事项

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

示例

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

package com.yi21.Double;

public class Yi21DoubleDoubleToLongBits {

    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.doubleToLongBits(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