两者int
和float
在 Java 中是 32 位大小的值。是否可以编写一对函数
int toInt(float f);
float toFloat(int n);
这样如果 f1
和f2
是任意的float
非 NaN 值且 i1 和 i2 是任意的 int
值:
-
f1 < f2
当且仅当toInt(f1) < toInt(f2)
-
f1 > f2
当且仅当toInt(f1) > toInt(f2)
-
f1 == f2
当且仅当toInt(f1) == toInt(f2)
-
toInt(toFloat(i1) == i1
-
toFloat(toInt(f1)) == f1
编辑:我已经编辑了问题以排除 float 的 NaN 值,感谢澄清这些值会发生什么的答案。
最佳答案
是的。 IEEE floats和 double 的排列方式使您可以通过对原始二进制表示进行无符号比较来比较它们。从浮点到原始整数相互转换的函数是 java.lang.Float.floatToIntBits和 java.lang.Float.intBitsToFloat 。这些函数是处理器内部函数,因此它们的成本极低。
对于长整型和 double 也是如此。这里的转换函数是 java.lang.Double.doubleToLongBits和 java.lang.Double.longBitsToDouble .
请注意,如果您想对整数使用正常的有符号比较,除了转换为整数之外,您还必须执行一些额外的转换。
此规则的唯一异常(exception)是 NaN,它无论如何都不允许全排序。
关于java - Java浮点和整数之间的双射保持顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24975469/