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 intpara un entero con signo, ounsigned long long intpara un entero sin signo. Para hacer un entero constante de tipolong long int, agregue el sufijoLLal entero. Para hacer un entero constante de tipounsigned long long int, agregue el sufijoULLal 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
intse puede omitir si se usan modificadores,unsigned long long, por ejemplo,unsigned long long. Por lo tanto, esto definiráonecomo ununsigned long long int, y cualquier número asignado serástatic_castaunsigned 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 que2ULLes ununsigned long long inttwose definirán comounsigned long long int:auto two = 2ULL; - C ++ 14 introdujo sufijos literales independientes de orden. Anteriormente, el sufijo
U/utení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 intliteral13LLU.
Si eso es correcto.
-
0xprefijo0xconvierte en un literal hexadecimal. -
ULLsufijoULLhace escribirunsigned long long.