为了账号安全,请及时绑定邮箱和手机立即绑定

Integer.MIN_VALUE 除以 -1

Integer.MIN_VALUE 除以 -1

噜噜哒 2021-08-04 16:44:47
为什么这行代码很重要?(没有它我会得到错误的答案)if (dividend == Integer.MIN_VALUE && divisor == -1) {    return Integer.MAX_VALUE;}问题:不使用乘法、除法和 mod 运算符将两个整数相除。如果溢出,返回2147483647回答public int divide(int dividend, int divisor) {    if(divisor == 0){        return dividend > 0 ? Integer.MAX_VALUE : Integer.MIN_VALUE;    }    if(dividend == 0){        return 0;    }    if (dividend == Integer.MIN_VALUE && divisor == -1) {        return Integer.MAX_VALUE;    }    boolean isNeg = (dividend > 0 && divisor < 0) || (dividend < 0 && divisor > 0);    Long up = Math.abs((long) dividend);    Long down = Math.abs((long) divisor);    int res = 0;    while(up >= down){        int shift = 0;        while(up >= (down << shift)){            shift++;        }        up -= down << (shift - 1);        res += 1 << (shift - 1);    }    return isNeg ? -res : res;}
查看完整描述

2 回答

?
莫回无

TA贡献1865条经验 获得超7个赞

Java 使用 32 位来存储int.

最大整数值为 2 31 -1

0111 1111 1111 1111 1111 1111 1111 1111

最小整数值为 -2 31

1000 0000 0000 0000 0000 0000 0000 0000

换句话说, int 没有足够大的值来存储 2 31 ( -Integer.MIN_VALUE)。


查看完整回答
反对 回复 2021-08-04
?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

因为,的绝对值Integer.MAX_VALUEInteger.MIN_VALUE不相等。

  • Integer.MAX_VALUE 是 2147483647

  • Integer.MIN_VALUE 是 -2147483648

如果你把Integer.MIN_VALUE通过-1,该值会溢出(2147483648 > 2147483647),因此必须有此操作的限制。


查看完整回答
反对 回复 2021-08-04
  • 2 回答
  • 0 关注
  • 229 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信