Integer.MIN_VALUE dividir por -1

Medir Wang:

por qué esta línea de asuntos de código? (me da una respuesta incorrecta sin ella)

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

La pregunta:

Dividir dos números enteros sin necesidad de utilizar la multiplicación, la división y el operador mod.

Si se trata de desbordamiento, volver 2147483647

Responder

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 utilizan 32 bits para almacenar int.

El valor int max es 2 31 -1

0111 1111 1111 1111 1111 1111 1111 1111

El valor min int es -2 31

1000 0000 0000 0000 0000 0000 0000 0000

En otras palabras, int no tiene un valor lo suficientemente grande para almacenar 2 31 ( -Integer.MIN_VALUE).

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=223182&siteId=1
Recomendado
Clasificación