java - Java浮点和整数之间的双射保持顺序

标签 java casting int

两者intfloat在 Java 中是 32 位大小的值。是否可以编写一对函数

int toInt(float f);
float toFloat(int n);

这样如果 f1f2是任意的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.floatToIntBitsjava.lang.Float.intBitsToFloat 。这些函数是处理器内部函数,因此它们的成本极低。

对于长整型和 double 也是如此。这里的转换函数是 java.lang.Double.doubleToLongBitsjava.lang.Double.longBitsToDouble .

请注意,如果您想对整数使用正常的有符号比较,除了转换为整数之外,您还必须执行一些额外的转换。

此规则的唯一异常(exception)是 NaN,它无论如何都不允许全排序。

关于java - Java浮点和整数之间的双射保持顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24975469/

相关文章:

java - 列表中的列表

java - 带有分页的 Spring Data JPA 方法查询给我一个错误

Android:无法从 View 转换到 MapView

PHP:将整数转换为 int - 出现错误

Python - 为什么 `int(x, 2)` 只能用于字符串,不能用于整数?

java - 将对象添加到 Java 集合时,是按值添加还是按引用添加?

java - 当通过派生类引用调用基类的静态方法时,哪些类会被初始化?

当 num 在 C 中为 float 时转换为 (&num) 的 (int *)

iOS 使用 (int) 转换 NSDictionary 中的值失败

java - java中如何从long double中获取int?