Heim >Backend-Entwicklung >C++ >Warum schlägt das Code-Snippet fehl, wenn einer „long'-Variablen ein großes Integer-Literal zugewiesen wird, funktioniert aber, wenn „long long' verwendet wird?

Warum schlägt das Code-Snippet fehl, wenn einer „long'-Variablen ein großes Integer-Literal zugewiesen wird, funktioniert aber, wenn „long long' verwendet wird?

DDD
DDDOriginal
2024-11-08 11:12:02260Durchsuche

Why does the code snippet fail when assigning a large integer literal to a `long` variable, but works when using `long long`?

Das Verhalten von „long long“ in C/C verstehen

Bei der Arbeit mit ganzzahligen Datentypen in C/C ist es wichtig, Folgendes zu beachten die Nuancen ganzzahliger Darstellungen verstehen. Ein bestimmter Datentyp, „long long“, wirft häufig Fragen zu seinem Verhalten auf.

Beachten 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;
}

Beim Ausführen dieses Codes kann es zu einem Fehler kommen Kommentieren Sie die kommentierte Zeile aus:

// num3 = 100000000000;

Der Fehler lautet:

"Fehler: Ganzzahlkonstante ist zu groß groß für langen Typ“

Wenn Sie den Code jedoch kompilieren und ausführen, ohne diese Zeile zu kommentieren, werden Werte ausgegeben, die deutlich größer als 10000000000 sind. Warum?

Grundlegendes zu ganzzahligen Literalen und Datentypen

In C/C sind Ganzzahlliterale Konstanten, die Zahlen darstellen Werte. Der Typ eines ganzzahligen Literals wird durch ein Suffix bestimmt, beispielsweise „L“ oder „LL“. Ohne Suffix wird das Literal standardmäßig als „int“ behandelt.

Im bereitgestellten Code ist der Wert „100000000000“ zu groß, um in einem „long“-Datentyp dargestellt zu werden. Daher müssen Sie ein Suffix hinzufügen, um den beabsichtigten Datentyp anzugeben.

Das Literal richtig zuweisen

Um den Fehler zu beheben, sollten Sie das Literal mit dem richtigen Suffix zuweisen , wie unten gezeigt:

long long num3 = 100000000000LL;

Das Suffix „LL“ bedeutet, dass das Literal als a behandelt werden soll Typ „long long“, der einen größeren Wertebereich aufnehmen kann.

Die aktualisierte Zeile weist „num3“ den Wert „100000000000“ zu, ohne einen Fehler auszulösen. Dadurch wird sichergestellt, dass die Variable „num3“ den beabsichtigten großen numerischen Wert enthalten und verarbeiten kann.

Das obige ist der detaillierte Inhalt vonWarum schlägt das Code-Snippet fehl, wenn einer „long'-Variablen ein großes Integer-Literal zugewiesen wird, funktioniert aber, wenn „long long' verwendet wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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