数字文字的ULL后缀

ane*_*eal 67 c c++

我遇到过这样的代码:

line += addr & 0x3fULL;
Run Code Online (Sandbox Code Playgroud)

显然,'U'和'L'不是十六进制数字.我猜测该十六进制数字文字末尾的'ULL'意味着"无符号长龙" - 我是否正确?(这种事情很难谷歌)如果是这样那么这是数字上的某种后缀修饰符?

NPE*_*NPE 66

gcc 手册:

ISO C99支持至少64位宽的整数的数据类型,作为扩展,GCC在C90模式和C++中支持它们.只需写入long long int有符号整数或unsigned long long int无符号整数即可.要使类型的整数常量long long int,请将后缀添加LL到整数.要使类型的整数常量unsigned long long int,请将后缀添加ULL到整数.

  • GCC手册有点过时了:它们不再是C++扩展. (2认同)

Mys*_*ial 27

对,那是正确的.

  • 0x 前缀使其成为十六进制文字.
  • ULL后缀使它成为类型unsigned long long.


Jon*_*Mee 12

我正在提出一个新的答案,因为我认识到当前的答案并不是来自跨平台的来源.C++ 11标准规定带U/ uLL/ llsuffix的文字是类型的文字:unsigned long long int [ source ]

U/ u是无符号整数的C/C++后缀.
LL/ lllong long整数的C/C++后缀,它是C++ 11中新类型,并且要求长度至少为64位.

笔记:

  1. 例如int,如果使用任何修饰符,则可以省略关键字unsigned long long.因此,这将定义oneunsigned long long int,并分配给它的任何数量将static_castunsigned long long int:unsigned long long one = 1
  2. C++ 11标志着它的出现auto.它将变量类型设置为声明时为其分配的类型.例如,由于2ULL是一个unsigned long long int文字two将被定义为一个unsigned long long int:auto two = 2ULL
  3. C++ 14引入了与顺序无关的文字后缀.以前U/ u后缀必须在任何大小后缀之前.但是大约在C++ 14中,后缀以任意顺序被接受,所以这现在是一个法律3LLU文字unsigned long long int.

  • 因为我的思维方式是这样的(但我手头没有C++ 14):我认为C++ 14不允许"13LUL"? (2认同)