long long llIdx = foo();
if (llIdx > 0LL) // Can I use 0 here?
...
Есть ли проблема, если я использую 0
вместо 0LL
в приведенном выше коде?
Когда я должен предпочесть 0LL
0
?
long long llIdx = foo();
if (llIdx > 0LL) // Can I use 0 here?
...
Есть ли проблема, если я использую 0
вместо 0LL
в приведенном выше коде?
Когда я должен предпочесть 0LL
0
?
Да, здесь можно использовать обычный 0
. Компилятор просматривает тип каждого аргумента до >
и продвигает меньший аргумент, чтобы они были одинакового размера.
Таким образом, llIdx > 0
и llIdx > 0LL
эквивалентны.
>
и продвигает меньший аргумент, чтобы они были одинакового размера. Вот почему я не поставил свой комментарий в качестве ответа. Существует множество особых случаев, когда знак обоих целых чисел меняется.
- person kay; 17.02.2015
0LL
вместо 0
?
- person Deqing; 17.02.2015
printf("%lld", 0LL);
) и unsigned n; int i; ... long long l = 0LL + n + i;
(если long long
охватывает диапазон unsigned int
, что, вероятно, всегда так, это предотвращает повышение уровня i
до unsigned
).
- person mafso; 17.02.2015
long long
является типомsigned
. Не имеет значения, пишете ли выx > 0ll
илиx > 0
, потому что0
автоматически повышается доlong long
. - person kay   schedule 17.02.2015long long
не имеет значения для этого конкретного случая. Если бы сравнение былоllIdx >= 0
(или0LL
), оно было бы таковым, потому что этот предикат всегда был бы истинным дляunsigned long long
. - person kdopen   schedule 17.02.2015