Heim  >  Artikel  >  Backend-Entwicklung  >  Warum verhält sich „long long“ in C/C anders als erwartet?

Warum verhält sich „long long“ in C/C anders als erwartet?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-08 10:04:01134Durchsuche

Why does  `long long` behave differently than expected in C/C  ?

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!

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