Estas son constantes en C y C++. El sufijo LL
significa que la constante es del tipo long long
, y UL
significa unsigned long
.
En general, cada L
o l
representa un long
y cada U
o u
representa un unsigned
. Entonces, v.g.
1uLL
significa la constante 1 con el tipo unsigned long long
.
Esto también se aplica a los números de coma flotante:
1.0f // of type 'float'
1.0 // of type 'double'
1.0L // of type 'long double'
y cadenas y caracteres, pero son prefijos:
'A' // of type 'char'
L'A' // of type 'wchar_t'
u'A' // of type 'char16_t' (C++0x only)
U'A' // of type 'char32_t' (C++0x only)
en C y C++ las constantes enteras se evalúan utilizando su tipo original, que puede causar errores debido al desbordamiento de enteros:
long long nanosec_wrong = 1000000000 * 600;
//^you'll get '-1295421440' since the constants are of type 'int'
// which is usually only 32-bit long, not big enough to hold the result.
long long nanosec_correct = 1000000000LL * 600
//^you'll correctly get '600000000000' with this
int secs = 600;
long long nanosec_2 = 1000000000LL * secs;
//^use the '1000000000LL' to ensure the multiplication is done as 'long long's.
En Google Go, todos los enteros se evalúan como enteros grandes (sin truncamiento ocurre),
var nanosec_correct int64 = 1000000000 * 600
y no hay "usual arithmetic promotion"
var b int32 = 600
var a int64 = 1000000000 * b
//^cannot use 1000000000 * b (type int32) as type int64 in assignment
por lo que los sufijos no son necesarios.
"He intentado hacer una búsqueda en Google" ... probar el buscador término 'constantes enteras C++ LL'. :) –
Siempre pensé en esos como 'literales' y constantes como variables declaradas como constantes. –
Bastante, pero imagino que los resultados para 'literales enteros C++ LL' son similares ... :) –