from - how can c++ code call ac function
Sufijo ULL en un literal numérico (3)
Del manual 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, ounsigned long long int
para un entero sin signo. Para hacer un entero constante de tipolong long int
, agregue el sufijoLL
al entero. Para hacer un entero constante de tipounsigned long long int
, agregue el sufijoULL
al entero.
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?
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
[ source ]
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:
- 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 ununsigned long long int
, y cualquier número asignado serástatic_cast
aunsigned long long int
:unsigned long long one = 1;
- C ++ 11 marcó el advenimiento del
auto
. Que establece el tipo de variable para el tipo asignado a él en la declaración. Por ejemplo, dado que2ULL
es ununsigned long long int
two
se definirán comounsigned long long int
:auto two = 2ULL;
- 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 legalunsigned long long int
literal13LLU
.
Si eso es correcto.
-
0x
prefijo0x
convierte en un literal hexadecimal. -
ULL
sufijoULL
hace escribirunsigned long long
.