Heim > Backend-Entwicklung > C++ > Warum läuft die Multiplikation ganzzahliger Literalkonstanten über, selbst wenn sie einer „long long'-Variablen zugewiesen wird?

Warum läuft die Multiplikation ganzzahliger Literalkonstanten über, selbst wenn sie einer „long long'-Variablen zugewiesen wird?

Barbara Streisand
Freigeben: 2024-11-11 06:08:02
Original
682 Leute haben es durchsucht

Why does multiplying integer literal constants overflow even when assigning to a `long long` variable?

Überlaufende lange lange Multiplikation

Bedenken Sie den folgenden Code:

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

Warum führt dieser Code zu einem Überlauf? wenn ganzzahlige Literalkonstanten multipliziert und das Ergebnis einer langen Variablen zugewiesen werden?

Im Vergleich zu den folgenden, die funktionieren:

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

Ganzzahlliterale in C haben einen Standardtyp, der von ihrem Wert abhängt . In diesem Fall passt 2000 in eine int-Variable, die normalerweise einen 32-Bit-Typ hat.

Arithmetische Operationen werden mit dem größeren Typ der Operanden ausgeführt, jedoch nicht kleiner als int. Im ersten Fall wird die Multiplikation also als int*int ausgeführt, was zu einem int-Ergebnis führt.

Das Problem entsteht, weil das int-Ergebnis möglicherweise überläuft, der Code jedoch versucht, es in einer langen Variablen zu speichern . C leitet keine Typen basierend auf dem Ziel ab, sodass die Zuweisung den Überlauf nicht verhindert.

Um dieses Problem zu vermeiden, können Sie die ganzzahligen Literale explizit in long long umwandeln, bevor Sie sie multiplizieren:

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

Das obige ist der detaillierte Inhalt vonWarum läuft die Multiplikation ganzzahliger Literalkonstanten über, selbst wenn sie einer „long long'-Variablen zugewiesen wird?. 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