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