Multiplicación de dos entradas desbordadas para dar como resultado un número negativo

Considere este fragmento de la especificación del lenguaje Java.

class Test {
    public static void main(String[] args) {
        int i = 1000000;
        System.out.println(i * i);
        long l = i;
        System.out.println(l * l);
    }
}

La salida es

-727379968
1000000000000

Por qué es el resultado-727379968 para(i*i)? Idealmente debería ser 1000000000000.

Sé que el rango de Integer es de –2147483648 a 2147483647. así que obviamente 1000000000000 no está en el rango dado.

Por qué el resultado se convierte en-727379968?

Respuestas a la pregunta(5)

Su respuesta a la pregunta