ULL-Suffix für ein numerisches Literal

Lesezeit: 3 Minuten

ULL Suffix fur ein numerisches Literal
Anekkode

Ich bin auf einen Code wie diesen gestoßen:

line += addr & 0x3fULL;

Offensichtlich sind ‘U’ und ‘L’ keine Hexadezimalziffern. Ich vermute, dass das ‘ULL’ am Ende dieses hexadezimalen numerischen Literals “Unsigned Long Long” bedeutet – habe ich Recht? (So ​​etwas ist sehr schwer zu googeln) Wenn ja, dann ist dies eine Art Suffix-Modifikator für die Nummer?

  • C: N1570 6.4.4.1. C++: N4700 5.13.2 [lex.icon]. In beiden Sprachen wird beim Suffix zwischen Groß- und Kleinschreibung unterschieden (außer dass lL und Ll sind nicht erlaubt) und die LL und U werden separat angegeben, sodass Sie beliebige haben können ull, uLL, Ull, ULL, llu, llU, LLu, LLU.

    – Keith Thompson

    28. Dezember 2017 um 3:45 Uhr


  • Ping @TonyTannous.

    – jww

    16. Juli 2018 um 20:47 Uhr

  • Beantwortet das deine Frage? Was bedeuten 0LL oder 0x0UL?

    – phuklv

    3. September 2020 um 15:10 Uhr

1646260808 972 ULL Suffix fur ein numerisches Literal
NPE

Von dem gcc Handbuch:

ISO C99 unterstützt Datentypen für ganze Zahlen, die mindestens 64 Bit breit sind (. . .). Um eine Integer-Konstante vom Typ zu erstellen long long intfügen Sie das Suffix hinzu LL zur Ganzzahl. Um eine Integer-Konstante vom Typ zu erstellen unsigned long long intfügen Sie das Suffix hinzu ULL zur Ganzzahl.

Diese Suffixe wurden auch zu C++ in hinzugefügt C++11und wurden schon lange (Wortspiel beabsichtigt) davor als Compiler-Erweiterungen unterstützt.

ULL Suffix fur ein numerisches Literal
Mystisch

Ja das ist richtig.

  • 0x Präfix macht es zu einem hexadezimalen Literal.
  • ULL Suffix macht es Typ unsigned long long.

  • Ich nehme an, es macht den Typ wenigstens das, aber da es der größte verfügbare Typ ist, ist das wahrscheinlich dasselbe.

    – Kerrek SB

    10. Januar 2012 um 19:29 Uhr

  • Du hast recht. Ich habe es gerade mit getestet long long x = 0xfffffffffffful; unter Windows und es wird nicht abgeschnitten – auch keine Warnungen.

    – Mystisch

    10. Januar 2012 um 19:34 Uhr


  • Alle Literale geben nur die an minimal gewünschte Breite, wobei das absolute Minimum ist int. Aber jedes Literal hat einen Typ, der es unterstützt, falls vorhanden …

    – Kerrek SB

    10. Januar 2012 um 19:37 Uhr

1646260809 689 ULL Suffix fur ein numerisches Literal
Jonathan Mei

Ich poste eine neue Antwort, weil ich erkenne, dass die aktuellen Antworten nicht aus einer plattformübergreifenden Quelle zitieren. Der c++11-Standard schreibt vor, dass ein Literal mit U/u und LL/ll Suffixe ist ein Literal vom Typ: unsigned long long int [source]

U/u ist das C/C++-Suffix für eine Ganzzahl ohne Vorzeichen.
LL/ll ist das C/C++-Suffix für a long long ganze Zahl, die a ist neuer Typ in C++11 und muss eine Länge von mindestens 64 Bit haben.

Anmerkungen:

  1. Das Schlüsselwort int kann weggelassen werden, wenn Modifikatoren verwendet werden, unsigned long long zum Beispiel. Das wird also definiert one als ein unsigned long long intund jede ihm zugewiesene Nummer wird sein static_cast zu unsigned long long int: unsigned long long one = 1
  2. c++11 markierte das Aufkommen von auto. Dadurch wird der Variablentyp auf den Typ festgelegt, der ihm bei der Deklaration zugewiesen wurde. Zum Beispiel weil 2ULL ist ein unsigned long long int wörtlich two wird als ein definiert unsigned long long int: auto two = 2ULL
  3. c++14 führte reihenfolgeunabhängige wörtliche Suffixe ein. Früher die U/u Suffix musste jedem Größensuffix vorangestellt werden. Aber um c++14 werden die Suffixe in beliebiger Reihenfolge akzeptiert, also jetzt seitdem 3LLU ist ein unsigned long long int wörtlich three wird als ein definiert unsigned long long int: auto three = 3LLU

916880cookie-checkULL-Suffix für ein numerisches Literal

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy