Verstehen der numerischen Wertdiskrepanz
Im bereitgestellten Codeausschnitt ist die offensichtliche Diskrepanz zwischen den beiden Multiplikationsoperationen auf das Fehlen oder Vorhandensein von zurückzuführen ein „L“-Zeichen, das an den numerischen Wert angehängt wird:
long oneYearWithL = 1000*60*60*24*365L; long oneYearWithoutL = 1000*60*60*24*365;
Anhängen von „L“, um einen langen Wert sicherzustellen
Im ersten Ausdruck das Suffix „L“. bezeichnet ein langes Ganzzahlliteral, das angibt, dass der Wert als 64-Bit-Ganzzahl behandelt werden soll. Das Ergebnis dieser Multiplikation ist ein langer Wert von 31536000000 Millisekunden pro Jahr.
Das Fehlen von „L“ führt zu einem ganzzahligen Wert
Im zweiten Ausdruck ohne das „ Mit dem Suffix „L“ erzeugt die Multiplikationsoperation einen ganzzahligen Wert. In diesem Fall ist das Ergebnis 1471228928, wenn der erwartete Wert über 3 Milliarden Millisekunden liegen sollte.
Ganzzahlüberlauf und -kürzung
Die Diskrepanz entsteht durch das Ergebnis der Multiplikation von vier 32-Bit-Ganzzahlen (1000, 60, 60 und 24) überschreiten um eine fünfte 32-Bit-Ganzzahl (365) den Bereich einer Ganzzahl, der [-2^31, 2^31-1] beträgt. Das Ergebnis wird umgebrochen und erzeugt im zweiten Ausdruck den falschen Wert 1471228928.
Konvertierung in die Zweierkomplementdarstellung
Wenn das Suffix „L“ fehlt, wenn Ist das Ergebnis der Multiplikation der Ganzzahlen negativ und überschreitet den Ganzzahlbereich, wird es in die Zweierkomplementdarstellung konvertiert, bevor es der Ganzzahlvariablen zugewiesen wird. Diese Konvertierung stellt sicher, dass der negative Wert innerhalb des Ganzzahlbereichs dargestellt werden kann.
Sicherstellung korrekter Ergebnisse
Um das korrekte Ergebnis zu erhalten, ist es wichtig, den numerischen Wert anzugeben der über den ganzzahligen Bereich hinausgeht, als langer Wert durch Anhängen von „L“, um eine ordnungsgemäße Darstellung sicherzustellen und eine Kürzung oder Konvertierung in die Zweierkomplementdarstellung zu vermeiden.
Das obige ist der detaillierte Inhalt vonWarum verändert das Hinzufügen eines „L“ zu einem numerischen Wert in Java das Ergebnis einer Multiplikationsoperation drastisch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!