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

लंबे तुलना कर रहा है अगर मैं उपरोक्त कोड में 0 बजाय 0LL का उपयोग करें?कोई समस्या के साथ 0

मुझे 0 से अधिक कब चाहिए?

+0

'लंबा लंबा' एक 'हस्ताक्षरित' प्रकार है। यदि आप 'x> 0ll' या 'x> 0' लिखते हैं, तो इससे कोई फर्क नहीं पड़ता है, क्योंकि' 0' स्वचालित रूप से' लंबे समय तक 'तक प्रचारित होता है। – kay

+0

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

+0

दरअसल, 'लंबे समय तक' हस्ताक्षर "इस विशिष्ट मामले के लिए कोई फर्क नहीं पड़ता। यदि तुलना 'llIdx> = 0' (या' 0LL') थी, तो यह होगा, क्योंकि यह अनुमान हमेशा 'हस्ताक्षरित लंबे समय तक' के लिए सच होगा। – kdopen

उत्तर

10

हां, आप यहां एक सादा 0 का उपयोग कर सकते हैं। कंपाइलर प्रत्येक तर्क के प्रकार को > पर देखेगा और छोटे को बढ़ावा देगा ताकि वे एक ही आकार के हों।

इस प्रकार llIdx > 0 और llIdx > 0LL समकक्ष हैं।

+0

"कंपाइलर प्रत्येक तर्क के प्रकार को'> 'पर देखेगा और छोटे को बढ़ावा देगा ताकि वे एक ही आकार के हों।" यही कारण है कि मैंने अपनी टिप्पणी को उत्तर के रूप में नहीं रखा। यदि दोनों पूर्णांक का संकेत भिन्न होता है तो विशेष मामलों का एक गुच्छा होता है। – kay

+1

लिखते समय आपकी टिप्पणी नहीं देखी गई :) मैं बस "हाँ" से थोड़ा अधिक विशिष्ट प्रश्न का उत्तर देने का प्रयास कर रहा था। और मुझे लगता है कि आपका मतलब "हस्ताक्षर" था, न कि "साइन" – kdopen

+0

तो जब हमें '0' के बजाय' 0LL' का उपयोग करना चाहिए? – Deqing

संबंधित मुद्दे