我遇到过这样的代码:
line += addr & 0x3fULL;
显然,'U'和'L'不是十六进制数字。我猜测该十六进制数字文字末尾的'ULL'意味着“无符号长龙” - 我是否正确? (这种事情很难谷歌)如果是这样那么这就是数字上的某种后缀修饰符?
答案 0 :(得分:60)
来自gcc
manual:
ISO C99支持至少64位宽的整数的数据类型,作为扩展,GCC在C90模式和C ++中支持它们。只需为有符号整数写
long long int
,或为无符号整数写unsigned long long int
。要生成类型为long long int
的整数常量,请将后缀LL
添加到整数。要生成类型为unsigned long long int
的整数常量,请将后缀ULL
添加到整数。
答案 1 :(得分:24)
是的,这是正确的。
0x
前缀使其成为十六进制文字。ULL
后缀使其成为unsigned long long
。答案 2 :(得分:11)
我正在提出一个新的答案,因为我认识到当前的答案并不是来自跨平台的来源。 C ++ 11标准规定带有U
/ u
和LL
/ ll
后缀的文字是类型的文字:unsigned long long int
< / strong> [source]
U
/ u
是无符号整数的C / C ++后缀
LL
/ ll
是long long
整数的C / C ++后缀,它是new type in C++11并且要求长度至少为64位。
注意:
int
,例如unsigned long long
。因此,这会将one
定义为unsigned long long int
,分配给它的任何数字都为static_cast
到unsigned long long int
:unsigned long long one = 1;
auto
的出现。它将变量类型设置为声明时为其分配的类型。例如,因为2ULL
是unsigned long long int
文字two
,将被定义为unsigned long long int
:auto two = 2ULL;
U
/ u
后缀必须在任何大小后缀之前。但是大约在C ++ 14中,后缀以任意顺序被接受,所以现在这是一个合法的unsigned long long int
文字13LLU
。