2015-02-17 14 views
5
long long llIdx = foo(); 
if (llIdx > 0LL) // Can I use 0 here? 
    ... 

qualche problema se uso 0 invece di 0LL nel codice di cui sopra?ci Confrontando molto lunga 0

Quando si preferisce 0LL su 0?

+0

'long long' è un tipo' signed'. Non fa differenza se scrivi 'x> 0ll' o' x> 0', perché '0' viene automaticamente promosso a' long long'. – kay

+0

http://stackoverflow.com/questions/13275136/which-initializer-is-appropriate-for-an-int64-t –

+0

In realtà, la "firma" di "long long" non è rilevante per questo caso specifico. Se il confronto fosse 'llIdx> = 0' (o' 0LL') lo sarebbe, perché quel predicato sarebbe sempre vero per 'unsigned long long'. – kdopen

risposta

10

Sì, è possibile utilizzare un semplice 0 qui. Il compilatore guarderebbe il tipo di ogni argomento a > e promuoverà quello più piccolo in modo che abbiano le stesse dimensioni.

Così llIdx > 0 e llIdx > 0LL sono equivalenti.

+0

"Il compilatore guarderebbe il tipo di ogni argomento a'> 'e promuoverà quello più piccolo in modo che abbiano le stesse dimensioni." Ecco perché non ho messo il mio commento come risposta. C'è un sacco di casi speciali se il segno di entrambi gli interi varia. – kay

+1

Non ho visto il tuo commento mentre stavo scrivendo :) Stavo solo cercando di rispondere alla domanda specifica con un po 'più di "sì". E presumo tu intendessi "firma", non "segno" – kdopen

+0

Quindi quando dovremmo usare '0LL' invece di' 0'? – Deqing