Ich bin auf folgenden Code gestoßen:
line += addr & 0x3fULL;
Offensichtlich sind 'U' und 'L' keine hexadezimalen Ziffern. Ich vermute, dass die 'ULL' am Ende dieses hexadezimalen numerischen Literals "Unsigned Long Long" bedeutet - bin ich richtig? (so etwas ist sehr schwer zu googeln) Wenn ja, dann ist dies eine Art Suffix-Modifikator für die Nummer?
lL
undLl
sind nicht erlaubt) und dieLL
undU
sind separat spezifiziert, so dass Sie alle haben könnenull
,uLL
,Ull
,ULL
,llu
,llU
,LLu
,LLU
.Antworten:
Aus dem
gcc
Handbuch :Diese Suffixe wurden auch in C ++ 11 zu C ++ hinzugefügt und wurden schon lange (Wortspiel beabsichtigt) als Compiler-Erweiterungen unterstützt.
quelle
Ja das ist richtig.
0x
Präfix macht es zu einem hexadezimalen Literal.ULL
Suffix macht es Typunsigned long long
.quelle
long long x = 0xfffffffffffful;
Windows getestet und es wird nicht abgeschnitten - auch keine Warnungen.int
. Aber jedes Literal hat einen Typ, der es unterstützt, wenn überhaupt ...Ich stelle eine neue Antwort auf, weil ich erkenne, dass die aktuellen Antworten nicht aus einer plattformübergreifenden Quelle stammen. Dasc ++ 11Standard schreibt vor, dass ein Literal mit
U
/u
undLL
/ll
Suffixen ein Literal vom Typ ist:unsigned long long int
[ Quelle ]U
/u
ist das C / C ++ - Suffix für eine vorzeichenlose Ganzzahl.LL
/ll
ist das C / C ++ - Suffix für einelong long
Ganzzahl, die in C ++ 11 ein neuer Typ ist und eine Länge von mindestens 64 Bit haben muss.Anmerkungen:
int
kann weggelassen werden, wenn beispielsweise Modifikatoren verwendet werdenunsigned long long
. So wird dies definierenone
als eineunsigned long long int
, und eine beliebige Nummer zugewiesen werden ,static_cast
umunsigned long long int
:unsigned long long one = 1
auto
. Dadurch wird der Variablentyp auf den Typ festgelegt, der ihm bei der Deklaration zugewiesen wurde. Zum Beispiel, weil2ULL
einunsigned long long int
Literaltwo
definiert ist alsunsigned long long int
:auto two = 2ULL
U
/u
vor jedem Suffix stehen. Aber circac ++ 14Die Suffixe werden in jeder Reihenfolge akzeptiert. Da dies nun3LLU
einunsigned long long int
Literal ist,three
wird es definiert alsunsigned long long int
:auto three = 3LLU
quelle
13LUL
?