Heim > Backend-Entwicklung > C++ > Warum verhält sich „long long' in C/C anders als „int' oder „long'?

Warum verhält sich „long long' in C/C anders als „int' oder „long'?

DDD
Freigeben: 2024-11-07 17:23:03
Original
763 Leute haben es durchsucht

Why does 'long long' behave differently than 'int' or 'long' in C/C  ?

Long Long in C/C verstehen

In C und C stellt der Datentyp „long long“ eine vorzeichenbehaftete Ganzzahl mit 64 Bits dar der Präzision. Dadurch können extrem große oder kleine Zahlen dargestellt werden, die von standardmäßigen Ganzzahltypen wie „int“ oder „long“ nicht berücksichtigt werden können.

Im bereitgestellten Codeausschnitt wurden mehrere Fragen zum Verhalten von „long“ aufgeworfen long‘-Variablen:

  • Größe von „long long“: Warum erzeugt „sizeof(num3)“ 0, was auf eine nicht initialisierte Variable hinweist?
  • Ganzzahlüberlauf:Warum wird der Code fehlerfrei kompiliert und ausgeführt und erzeugt Werte, die viel größer als 10000000000 sind, wenn die kommentierte Zeile ('num3 = 100000000000;') unkommentiert ist?
  • Literale Ganzzahlkonstanten : Warum führt die Zuweisung einer ganzzahligen Konstante, die größer ist als die „long“-Typgrenzen, zu einer „long“-Variablen zu einem Kompilierungsfehler?

Größe von „long long“:

Der Operator „sizeof“ gibt die Größe einer Variablen oder eines Datentyps in Bytes zurück. Da „num3“ mit keinem Wert initialisiert wird, bleibt es nicht initialisiert und seine Größe ist undefiniert, was zu 0 führt. Um dies zu beheben, initialisieren Sie „num3“ explizit mit einem „long long“-Wert.

Integer-Überlauf:

C behandelt den Integer-Überlauf stillschweigend. Wenn der einer Variablen zugewiesene Wert ihre Kapazität überschreitet, erfolgt ein Umlauf und die Zählung beginnt beim niedrigsten Wert. In diesem Fall führt die Zuweisung von 10000000000 zu einer „langen“ Variablen zu einem Überlauf und das Ergebnis ist ein negativer Wert. Da „num2“ jedoch ein „long long“ ist, kann es den großen Wert ohne Überlauf aufnehmen.

Literale Ganzzahlkonstanten:

In C und C ganzzahlig Konstanten sind stark typisiert. Das Zuweisen einer literalen Ganzzahlkonstante, die die Grenzen des Zieldatentyps überschreitet, führt zu einem Kompilierungsfehler. In diesem Beispiel überschreitet die Konstante 100000000000 den Bereich von „long“, und das Hinzufügen von „LL“ gibt explizit an, dass sie als „long long“-Konstante behandelt werden soll.

Das obige ist der detaillierte Inhalt vonWarum verhält sich „long long' in C/C anders als „int' oder „long'?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage