Integer.MIN_VALUE разделить на -1

Калибровочные Ван:

почему эта линия вопросов коды? (я получаю неправильный ответ без него)

if (dividend == Integer.MIN_VALUE && divisor == -1) {
    return Integer.MAX_VALUE;
}

Вопрос:

Разделить два целых числа, не используя умножение, деление и по модулю оператора.

Если это переполнение, возвращение 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;
}
xingbin:

Java использует 32 бит для хранения int.

Максимальное значение INT равно 2 31 -1

0111 1111 1111 1111 1111 1111 1111 1111

Значение мин INT -2 31

1000 0000 0000 0000 0000 0000 0000 0000

Другими словами, ИНТ не имеет достаточно большое значение для магазина 2 31 ( -Integer.MIN_VALUE).

рекомендация

отhttp://43.154.161.224:23101/article/api/json?id=223176&siteId=1
рекомендация