Są to stałe w C i C++. Przyrostek LL
oznacza stałą typu long long
, a UL
oznacza unsigned long
.
Ogólnie, każdy L
lub l
oznacza long
i każdy U
lub u
oznacza grupę unsigned
. Tak więc np.
1uLL
oznacza stałą 1 o typie unsigned long long
.
Odnosi się to również do liczb zmiennoprzecinkowych:
1.0f // of type 'float'
1.0 // of type 'double'
1.0L // of type 'long double'
i smyczki i znaków, ale są przedrostki:
'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)
w C i C++ stałych całkowitych są oceniane przy użyciu swoich oryginalny typ, który może powodować błędy z powodu przekroczenia liczby całkowitej:
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.
W Google Go, wszystkie liczby całkowite są oceniane jako wielkich liczb całkowitych (bez obcinania zdarza),
var nanosec_correct int64 = 1000000000 * 600
i nie ma "usual arithmetic promotion"
var b int32 = 600
var a int64 = 1000000000 * b
//^cannot use 1000000000 * b (type int32) as type int64 in assignment
tak przyrostki nie są konieczne.
„Próbowałem zrobić wyszukiwania Google” ... spróbuj wyszukiwanie termin "całkowite stałe C++ LL". :) –
Zawsze uważałem je za "literały" i stałe za zmienne zadeklarowane jako stałe. –
Wystarczy, ale wyobrażam sobie, że wyniki dla 'literałów całkowitych C++ LL' są podobne ... :) –