Ce sont des constantes en C et C++. Le suffixe LL
signifie que la constante est de type long long
et UL
signifie unsigned long
.
En général, chaque L
ou l
représente un long
et chaque U
ou u
représente un unsigned
. Ainsi, par exemple
1uLL
signifie la constante 1 de type unsigned long long
.
Cela vaut également pour les nombres à virgule flottante:
1.0f // of type 'float'
1.0 // of type 'double'
1.0L // of type 'long double'
et des chaînes et des personnages, mais ils sont préfixes:
'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 et C++ les constantes entières sont évaluées en utilisant leur type d'origine, ce qui peut provoquer des bogues en raison d'un débordement d'entier:
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.
Dans Google Go, tous les entiers sont évalués comme les grands entiers (pas troncature se produit),
var nanosec_correct int64 = 1000000000 * 600
et il n'y a pas "usual arithmetic promotion"
var b int32 = 600
var a int64 = 1000000000 * b
//^cannot use 1000000000 * b (type int32) as type int64 in assignment
de sorte que les suffixes ne sont pas nécessaires.
«J'ai essayé de faire une recherche Google » ... essayez la recherche terme 'constantes entières C++ LL'. :) –
Je les ai toujours considérés comme des 'littéraux' et des constantes comme des variables déclarées comme constantes. –
Assez juste, mais j'imagine que les résultats pour 'littéraux entiers C++ LL' sont similaires ... :) –