Maison >Java >javaDidacticiel >Pourquoi l'ajout de « L » à un littéral entier modifie-t-il les résultats de la multiplication ?
Pourquoi les opérations de multiplication donnent-elles des résultats différents ?
Dans le code fourni, la différence dans les résultats est due à la présence ou à l'absence du lettre "L" ajoutée au littéral entier. Pour comprendre cet écart, il est important d'examiner les types de données impliqués :
long oneYearWithL = 1000*60*60*24*365L; long oneYearWithoutL = 1000*60*60*24*365;
La valeur attribuée à oneYearWithL est une valeur longue, indiquée par le suffixe "L". Un long peut représenter une plus grande plage de valeurs par rapport à un entier. Dans ce cas, 365 est considéré comme un long, et le résultat de sa multiplication par les valeurs entières précédentes est également un long.
D'un autre côté, oneYearWithoutL se voit attribuer une valeur entière. La multiplication de valeurs entières donne un nombre entier. Cependant, la valeur de cette expression dépasse la limite maximale d'entiers de 32 bits (2 ^ 31 - 1). Par conséquent, lors de l'affectation, il est tronqué pour s'adapter à la plage d'entiers valides, ce qui entraîne un calcul incorrect.
Pour illustrer cela davantage, considérons le résultat suivant :
System.out.println(1000*60*60*24*365L); System.out.println(1000*60*60*24*365); System.out.println(Integer.MAX_VALUE);
Sortie :
31536000000 1471228928 2147483647
Cela montre que lorsque le « L » est inclus, le résultat se situe dans la plage du type de données long et est donc précis. Mais lorsque le « L » est omis, le résultat est tronqué à un nombre entier, ce qui entraîne une valeur incorrecte.
Pour résoudre ce problème et obtenir le résultat correct, l'expression de multiplication dans oneYearWithoutL doit être explicitement convertie en un long using (long) ou le littéral numérique doit avoir le suffixe "L" ajouté, comme oneYearWithoutL = 1000*60*60*24*365L.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!