数字文字的ULL后缀

时间:2012-01-10 19:26:12

标签: c++ c

我遇到过这样的代码:

line += addr & 0x3fULL;

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

3 个答案:

答案 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 / uLL / ll后缀的文字是类型的文字:unsigned long long int < / strong> [source]

U / u是无符号整数的C / C ++后缀 LL / lllong long整数的C / C ++后缀,它是new type in C++11并且要求长度至少为64位。

注意:

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