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?
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.
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
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:
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
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
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
Weil mein Verstand so funktioniert (aber ich habe kein C ++ 14 zur Hand): Ich nehme an, dass C ++ 14 dies nicht zulässt 13LUL?
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
undLl
sind nicht erlaubt) und dieLL
undU
werden separat angegeben, sodass Sie beliebige haben könnenull
,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