doubleToRawLongBits和Double.compare(double d1, double d2)

如题所述

第1个回答  2022-07-27

Double类中doubleToRawLongBits,double类型占64位,而long类型也是占64位,两个类型在计算机中存储的机器码都是64位二进制,从0和1的角度来看,是没有任何区别的。区别在于,对应同一64位二进制机器码,两者的解析方式不同。

所以,在jdk中double类(float与int对应)中提供了double与long转换,doubleToRawLongBits就是将double转换为long,这个方法是原始方法(底层不是java实现,是c++实现的)

而doubleToRawLongBits转换时,value可能是NaN,这时候,doubleToRawLongBits还是会直接转换为对应的long,doubleToRawLong的可以允许非double数值转换,而doubleToLongBits经过了一次处理,将NaN的数值全部替换为 ,这个就是两者的区别,

在Double类中,主要是compare(double d1, double d2)调用的doubleToRawLongBits方法,

先将double转为long类型,然后比较,那为什么能用long类型来比较呢,我们先看看两个正的浮点数比较d1和d2(大于0),转换后对应的long类型数值为l1,l2.
设d1的二进制组成:符号位为 ,指数位为 ,尾数位为
设d2的二进制组成:符号位为 ,指数位为 ,尾数位为

假如两个浮点数都是负数,你会证明吗?

本人也是在慢慢学习中,如有错误还请原谅、敬请指出,谢谢!