猿问

Integer.MIN_VALUE 除以 -1

为什么这行代码很重要?(没有它我会得到错误的答案)

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;

}


噜噜哒
浏览 231回答 2
2回答

莫回无

Java 使用 32 位来存储int.最大整数值为 2&nbsp;31&nbsp;-10111&nbsp;1111&nbsp;1111&nbsp;1111&nbsp;1111&nbsp;1111&nbsp;1111&nbsp;1111最小整数值为 -2&nbsp;311000&nbsp;0000&nbsp;0000&nbsp;0000&nbsp;0000&nbsp;0000&nbsp;0000&nbsp;0000换句话说, int 没有足够大的值来存储 2&nbsp;31&nbsp;(&nbsp;-Integer.MIN_VALUE)。

蝴蝶不菲

因为,的绝对值Integer.MAX_VALUE和Integer.MIN_VALUE不相等。Integer.MAX_VALUE&nbsp;是&nbsp;2147483647Integer.MIN_VALUE&nbsp;是&nbsp;-2147483648如果你把Integer.MIN_VALUE通过-1,该值会溢出(2147483648 > 2147483647),因此必须有此操作的限制。
随时随地看视频慕课网APP

相关分类

Java
我要回答