Sufijo ULL en un literal numérico

Me he encontrado con un código como este:

line += addr & 0x3fULL; 

Obviamente, ‘U’ y ‘L’ no son dígitos hexadecimales. Supongo que el ‘ULL’ al final de ese hex numérico literal significa “Largo largo sin firmar” – ¿estoy en lo correcto? (este tipo de cosas es muy difícil de googlear) si es así, ¿esto es algún tipo de modificador de sufijo en el número?

Del manual de gcc :

ISO C99 admite tipos de datos para enteros de al menos 64 bits de ancho, y como extensión, GCC los admite en modo C90 y en C ++. Simplemente escriba long long int para un entero con signo, o unsigned long long int para un entero sin signo. Para hacer un entero constante de tipo long long int , agregue el sufijo LL al entero. Para hacer un entero constante de tipo unsigned long long int , agregue el sufijo ULL al entero.

Si eso es correcto.

  • 0x prefijo 0x convierte en un literal hexadecimal.
  • ULL sufijo ULL hace escribir unsigned long long .

Estoy planteando una nueva respuesta porque reconozco que las respuestas actuales no citan de una fuente multiplataforma. El estándar C ++ 11 dicta que un literal con sufijos U / u y LL / ll es un literal de tipo: unsigned long long int [ fuente ]

U / u es el sufijo C / C ++ para un entero sin signo.
LL / ll es el sufijo C / C ++ para un entero long long que es un tipo nuevo en C ++ 11 y se requiere tener una longitud de al menos 64 bits.

Notas:

  1. La palabra clave int se puede omitir si se usan modificadores, unsigned long long , por ejemplo, unsigned long long . Por lo tanto, esto definirá one como un unsigned long long int , y cualquier número asignado será static_cast a unsigned long long int : unsigned long long one = 1;
  2. C ++ 11 marcó el advenimiento del auto . Que establece el tipo de variable para el tipo asignado a él en la statement. Por ejemplo, dado que 2ULL es un unsigned long long int two se definirán como unsigned long long int : auto two = 2ULL;
  3. C ++ 14 introdujo sufijos literales independientes de orden. Anteriormente, el sufijo U / u tenía que ir precedido de cualquier sufijo de tamaño. Pero alrededor de C ++ 14 los sufijos se aceptan en cualquier orden, por lo que ahora es un legal unsigned long long int literal 13LLU .