Maison  >  Article  >  Java  >  Pourquoi l'ajout d'un « L » à une valeur numérique en Java change-t-il radicalement le résultat d'une opération de multiplication ?

Pourquoi l'ajout d'un « L » à une valeur numérique en Java change-t-il radicalement le résultat d'une opération de multiplication ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-07 04:43:02347parcourir

Why does adding an

Comprendre l'écart de valeur numérique

Dans l'extrait de code fourni, l'écart apparent entre les deux opérations de multiplication provient de l'absence ou de la présence de un caractère "L" ajouté à la valeur numérique :

long oneYearWithL = 1000*60*60*24*365L;
long oneYearWithoutL = 1000*60*60*24*365;

Ajout de "L" pour garantir une valeur longue

Dans la première expression, le suffixe "L" désigne un littéral entier long, indiquant que la valeur doit être traitée comme un entier de 64 bits. Le résultat de cette multiplication est une valeur longue de 31536000000 millisecondes par an.

L'absence de "L" donne une valeur entière

Dans la deuxième expression, sans le " L", l'opération de multiplication produit une valeur entière. Dans ce cas, le résultat est 1471228928 alors que la valeur attendue devrait être supérieure à 3 milliards de millisecondes.

Dépassement d'entier et troncature

L'écart se produit parce que le résultat de la multiplication de quatre Les entiers de 32 bits (1 000, 60, 60 et 24) dépassent d'un cinquième entier de 32 bits (365) la plage d'un entier, qui est [-2 ^ 31, 2 ^ 31-1]. Le résultat s'enroule, produisant la valeur incorrecte de 1471228928 dans la deuxième expression.

Conversion en représentation complémentaire à 2

En l'absence du suffixe "L", si le résultat de la multiplication des entiers est négatif et dépasse la plage des entiers, il est converti en sa représentation en complément à 2 avant d'être affecté à la variable entière. Cette conversion garantit que la valeur négative peut être représentée dans la plage entière.

Assurer des résultats corrects

Pour obtenir le résultat correct, il est essentiel de déclarer la valeur numérique qui dépasse la plage entière en tant que valeur longue en ajoutant "L" pour garantir une représentation correcte et éviter la troncature ou la conversion en représentation en complément à 2.

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!

Déclaration:
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