Java 求两个整数的中点

标签 java math integer-overflow

我试图找到两个整数之间的整数中点。例如 mid(2,3) 将是 2,而不是 2.5。我有下面的工作正常,但我想使用从 MIN_VALUE 到 MAX_VALUE 的数字,这样做会导致溢出,因此结果完全不正确。

public static int mid(int x, int y){
    int midpoint =  (x+y)/2;
    return midpoint;
}

我现在有:

public static int mid(int x, int y){
    int low = Math.min(x, y);
    int high = Math.max(x, y);
    int midpoint =  (low + high) >>> 1;
    return midpoint;
}

这似乎适用于从 0 到 Integer.MAX_VALUE 的 x 和 y 值,但是如果 x 是负数则不正确,我不确定为什么会这样?

最佳答案

这个怎么样?

public static int mid(int x, int y) {
   return x/2 + y/2 + (x%2 + y%2)/2;
}

关于Java 求两个整数的中点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41842763/

相关文章:

java - 具有递归 (n+(n-1)+n) 错误的公式

java - Android WebView javascript 支持

java - Sonar 说我在界面中有多余的 throw

java - 如何选择距引用点一定距离的随机点

java - 如何从天数转换为天数、周数、月数、年数(以每日储蓄计)

rust - 如何解决可能的乘法溢出以获得正确的模运算?

java - 有没有办法在 Java 中找出数据库游标是否打开?

algorithm - K-Means 算法,计算平方误差?

c++ - 一个只能由于整数溢出而失败的函数应该是 noexcept 吗?

android - 检查 Android NDK 代码中的整数溢出