La Multiplication de deux entiers débordant d'entraîner un nombre négatif

Considérer cet extrait de la Java langage de spécification.

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 sortie est

-727379968
1000000000000

Pourquoi le résultat -727379968 pour (i*i)? Idéalement, il devrait être e 1000000000000.

Je sais que la gamme de nombre Entier est à partir de -2147483648 à 2147483647. alors, évidemment, e 1000000000000
n'est pas dans la plage donnée.

Pourquoi la suite de devenir -727379968?

InformationsquelleAutor user900721 | 2011-08-27