Что означает 0LL или 0x0UL?
Я читаю Google Go учебник и увидел это в разделе констант:
нет таких констант, как 0LL или 0x0UL
Я попытался сделать поиск в Google, но все, что приходит, - это случаи, когда люди используют эти константы, но не объясняют, что они означают. Предполагается, что 0x запускает шестнадцатеричный литерал, но это не символы, которые возможны в шестнадцатеричном числе.
5 ответов
эти константы в 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++ целочисленные константы вычисляются с использованием их исходного типа, что может вызвать ошибки из-за переполнения integer:
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
так что суффиксы не нужны.
существует несколько различных основных числовых типов, и буквы различают их:
0 // normal number is interpreted as int
0L // ending with 'L' makes it a long
0LL // ending with 'LL' makes it long long
0UL // unsigned long
0.0 // decimal point makes it a double
0.0f // 'f' makes it a float
0LL
длинный длинный ноль.
0x0UL
- длинный нуль без знака, выраженный шестнадцатеричной нотацией. 0x0UL
==0UL
.
+В C-подобных языках, эти суффиксы сказать точно. Так, например. 9-это int
переменной, но 0LL
это long long
LL
обозначает литерал как long long
и UL
обозначает один как unsigned long
и 0x0
шестнадцатеричное 0
. Так что 0LL
и 0x0UL
- эквивалентное число, но разные типы данных; первый -long long
и последнее -unsigned long
.
есть много из этих спецификаторов:
1F // float
1L // long
1ull // unsigned long long
1.0 // double