查看IEEE浮动/双重表示
[mantissa sign][signed exponent][unsigned mantissa]
我是否正确地假设以数字方式对这些值进行排序总是会导致与按字典顺序对位模式本身进行排序相同的结果?
我的另一个问题是如何获得Java中浮点/双精度的位模式(IEEE表示)的位(或者更确切地说是字节)?(或者只是在HotSpotJVM上,如果没有指定内部表示。)
如何为任意精度的Decimals(如java. math.BigDecimal
)构造类似IEEE的表示?
按位模式排序就足够了,但不是必须的。(有符号零和NaN可以苛刻您的风格。)
您可以使用DoubleToLongBits()
访问double
的位模式,使用Float. floatToIntBits()
访问float
的位模式。
编辑:正如马克·迪金森指出的,这将负数向后排序。以下转换为您提供了足够但不是必要的数字排序:
longbits ^= (longbits >> 63) & 0x7fffffffffffffff;
这里的效果是将符号位与所有其他位进行异或。这种转换是它自己的逆;在排序之前应用一次,在排序之后应用一次。