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
?