Maison > Java > javaDidacticiel > Pourquoi l'ajout de « L » à un littéral entier modifie-t-il les résultats de la multiplication ?

Pourquoi l'ajout de « L » à un littéral entier modifie-t-il les résultats de la multiplication ?

Linda Hamilton
Libérer: 2024-11-07 09:53:02
original
776 Les gens l'ont consulté

Why Does Adding 'L' to an Integer Literal Change Multiplication Results?

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;
Copier après la connexion

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);
Copier après la connexion

Sortie :

31536000000
1471228928
2147483647
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal