Heim > Java > javaLernprogramm > Hauptteil

Warum führt die Multiplikation in Java beim Umgang mit großen Zahlen zu unerwarteten Ergebnissen?

Linda Hamilton
Freigeben: 2024-11-06 17:27:02
Original
357 Leute haben es durchsucht

Why Does Multiplication in Java Produce Unexpected Results When Dealing with Large Numbers?

Multiplikationsergebnisse und Datentypen in Java verstehen

In Java hängt das Ergebnis einer Multiplikationsoperation von den Datentypen der Operanden ab. Dies wird insbesondere bei der Multiplikation großer Werte deutlich, wie das folgende Codebeispiel zeigt:

long oneYearWithL = 1000 * 60 * 60 * 24 * 365L;
long oneYearWithoutL = 1000 * 60 * 60 * 24 * 365;
System.out.println(oneYearWithL); // Output: 31536000000
System.out.println(oneYearWithoutL); // Output: 1471228928
Nach dem Login kopieren

Erläuterung:

  • oneYearWithL: Durch das Anhängen von „L“ am Ende der Zahl geben wir den Datentyp explizit als long an. Dadurch wird sichergestellt, dass das Ergebnis in einer 64-Bit langen Ganzzahl gespeichert wird, die sehr große Werte aufnehmen kann. Daher ist das Multiplikationsergebnis korrekt und entspricht 3.153.600.000 Millisekunden (oder Jahren).
  • oneYearWithoutL: Wenn wir das „L“ weglassen, werden die Operanden als 32-Bit-Ganzzahlen behandelt. Das Ergebnis der Multiplikation dieser Ganzzahlen überschreitet den Bereich einer Ganzzahl, was zu einem falschen Wert führt: 1.471.228.928.

Integer Overflow verstehen:

In Java ganze Zahlen sind vorzeichenbehaftete 32-Bit-Werte im Bereich von -2.147.483.648 bis 2.147.483.647. Wenn das Ergebnis einer arithmetischen Operation diese Grenzen überschreitet, springt es auf die gegenüberliegende Seite des Bereichs, was zu einem Ganzzahlüberlauf führt.

In unserem Beispiel ist das Ergebnis der Multiplikation von 1000 60 60 24 365 ist 2.592.000.000. Da dieser Wert den maximalen ganzzahligen Wert überschreitet, wird er auf -1.702.967.297 umgebrochen, was wir als Ausgabe (1.471.228.928) sehen.

Konvertierung in langen Datentyp:

Um einen Ganzzahlüberlauf zu verhindern, empfiehlt es sich immer, für große numerische Berechnungen den langen Datentyp zu verwenden. Durch die explizite Angabe von „L“ nach einer Zahl können wir Java zwingen, den Wert als lange Ganzzahl zu behandeln und so sicherzustellen, dass das Ergebnis in der 64-Bit-langen Variablen gespeichert wird.

Best Practices:

  • Verwenden Sie den Long-Datentyp für große numerische Werte.
  • Achten Sie auf einen möglichen Ganzzahlüberlauf und verwenden Sie je nach Bedarf Long oder BigInteger.
  • Erwägen Sie die Verwendung von Floating -Punktzahlen für sehr große oder dezimale Berechnungen.

Das obige ist der detaillierte Inhalt vonWarum führt die Multiplikation in Java beim Umgang mit großen Zahlen zu unerwarteten Ergebnissen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!