Это константы в C и C ++.Суффикс LL
означает, что константа имеет тип long long
, а UL
означает unsigned long
.
Как правило, каждый L
или l
представляет long
, а каждый U
или u
представляет unsigned
.Так, например,
1uLL
означает константу 1 с типом unsigned long long
.
Это также относится к числам с плавающей запятой:
1.0f // of type 'float'
1.0 // of type 'double'
1.0L // of type 'long double'
и строкам и символам,но они являются префиксами:
'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)
В C и C ++ целочисленные константы оцениваются с использованием их исходного типа, что может вызвать ошибки из-за целочисленного переполнения:
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.
ВGoogle Go, все целые числа оцениваются как большие целые числа (усечение не происходит),
var nanosec_correct int64 = 1000000000 * 600
и нет " обычного арифметического продвижения "
var b int32 = 600
var a int64 = 1000000000 * b
// ^ cannot use 1000000000 * b (type int32) as type int64 in assignment
, поэтомусуффиксы не нужны.