Heim > Artikel > Backend-Entwicklung > Warum verhält sich „long long“ in C/C anders als erwartet?
Long Long in C/C verstehen
Bei der Arbeit mit verschiedenen Datentypen in C und C ist es wichtig, die Nuancen jedes einzelnen zu verstehen Typ. Ein häufiges Missverständnis ist das Verhalten von long long.
Bedenken Sie den folgenden Codeausschnitt:
#include <stdio.h> int main() { int num1 = 1000000000; long num2 = 1000000000; long long num3; //num3 = 100000000000; long long num4 = ~0; printf("%u %u %u", sizeof(num1), sizeof(num2), sizeof(num3)); printf("%d %ld %lld %llu", num1, num2, num3, num4); return 0; }
Das Kompilieren dieses Codes löst einen Fehler aus, wenn die Zeile auskommentiert wird, die 100000000000 num3 zuweist: „Ganzzahlkonstante ist zu groß für lange Schrift.“ Beim Ausführen des Codes mit der kommentierten Zeile werden jedoch immer noch Werte ausgegeben, die größer als 10000000000 sind.
Dieses Verhalten ist auf eine falsche Vorstellung von der Typinferenz zurückzuführen. Das Literal 100000000000 ist eine ganzzahlige Konstante, ihr Wert überschreitet jedoch den Bereich des int-Datentyps (32 Bit). Daher ist sie als Konstante vom langen Typ gedacht. Allerdings betrachten C und C solche Literale standardmäßig als int, was zu dem Fehler führt.
Um dieses Problem zu beheben, ist es notwendig, den Typ des Literals explizit mithilfe eines Suffixes anzugeben. Das LL-Suffix deklariert num3 als einen langen Typ:
long long num3 = 100000000000LL;
Diese Änderung ermöglicht eine erfolgreiche Kompilierung des Codes ohne Fehler oder unerwartetes Verhalten.
Das obige ist der detaillierte Inhalt vonWarum verhält sich „long long“ in C/C anders als erwartet?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!