Heim > Backend-Entwicklung > C++ > Hauptteil

Warum führt die Multiplikation ganzzahliger Literale selbst bei einer „long long'-Variablen zu einem Überlauf?

Barbara Streisand
Freigeben: 2024-11-10 19:04:03
Original
820 Leute haben es durchsucht

Why Does Multiplying Integer Literals Result in Overflow Even with a `long long` Variable?

Long Long Integer Overflow in der C-Arithmetik verstehen

Bedenken Sie den folgenden Codeausschnitt:

long long int n = 2000 * 2000 * 2000 * 2000;    // overflow
Nach dem Login kopieren

Warum ist das so? Code führt zu einem Überlauf, obwohl eine lange Variable deklariert wurde, die den enthalten soll Ergebnis?

Grund für den Überlauf

Das Problem liegt im Typ der Integer-Literal-Konstanten 2000. Standardmäßig wird Integer-Literalen der kleinste Typ zugewiesen, der sie enthalten kann Wert, ohne kleiner als int zu sein. Da 2000 in einem 32-Bit-Int gespeichert werden kann, werden arithmetische Operationen an diesen Literalen als Int-Operationen ausgeführt.

Typförderung

Obwohl lange Variablen wie n dies können Um größere Werte zu speichern, werden arithmetische Operatoren mit dem größeren der in der Multiplikationsoperation vorhandenen Typen aufgerufen. Allerdings bleibt in diesem Fall der größere Typ int, unabhängig vom Zieltyp.

Implikationen für Überlauf

Das bedeutet, dass das Ergebnis der Multiplikation 2000 * 2000 ist * 2000 * 2000 wird als 32-Bit-Ganzzahl berechnet, die überläuft, weil das Ergebnis den Maximalwert überschreitet, den ein Int erreichen kann halten.

Alternative Ansätze

Um diesen Überlauf zu vermeiden, können Sie die ganzzahligen Literale mithilfe des LL-Suffixes für Literalkonstanten oder des expliziten Umwandlungsoperators ( long long):

long long int n = (long long)2000 * 2000 * 2000 * 2000;  // no overflow
Nach dem Login kopieren

Alternativ können Sie die pow-Funktion zur Berechnung des Ergebnisses verwenden und dabei sicherstellen, dass die Berechnung mit durchgeführt wird lange lange Werte:

long long int n = pow(2000, 4);  // no overflow
Nach dem Login kopieren

Durch explizites Casting oder die Verwendung der pow-Funktion stellen Sie sicher, dass die Berechnungen mit langen langen Werten durchgeführt werden, wodurch ein Überlauf verhindert wird.

Das obige ist der detaillierte Inhalt vonWarum führt die Multiplikation ganzzahliger Literale selbst bei einer „long long'-Variablen zu einem Überlauf?. 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