2010-09-21 10 views
13

जब एक प्रकार int से बड़ा तुलना, एक पूर्णांक निरंतर के साथ, मैं इस प्रकार रखना चाहिए बाईं या सही तुलना सुनिश्चित करने के लिए सही पर लगातार किया जाता है?योदा शर्तों और पूर्णांक पदोन्नति

int64_t i = some_val; 
if (i == -1) 

या यह होना चाहिए:

if (-1 == i) 

वहाँ किसी भी परिस्थितियों में किसी भी स्थिति के साथ तुलना करने के लिए समान नहीं है कर रहे हैं -1LL (जहां int64_tlong long है)?

+5

योदा एक महान टैग था :) –

+4

एक महान टैग योदा :-) –

उत्तर

11

इससे कोई फर्क नहीं पड़ता कि आप दाहिने हाथ की ओर या बाएं हाथ की ओर पर डाल दिया; == ऑपरेटर पूरी तरह से सममित है।

यदि दोनों == ऑपरेटर के लिए संचालित होते हैं तो अंकगणितीय प्रकार होता है, इस मामले में, "सामान्य अंकगणितीय रूपांतरण" लागू होते हैं (सी 99 §6.5.9)। इस मामले में, लागू होने वाला नियम है:

दोनों ऑपरेंड पूर्णांक प्रकार पर हस्ताक्षर किए हैं या दोनों पूर्णांक प्रकार, कम पूर्णांक रूपांतरण पद के प्रकार के साथ संकार्य अहस्ताक्षरित है संकार्य के प्रकार में बदल जाती है तो अधिक रैंक के साथ। (C99 §6.3.1.8)

तो -1 int64_t में बदल जाती है। -1LL कोई फर्क नहीं पड़ता।

+0

बढ़िया, वास्तव में क्या मैं जानना चाहता था। –

+15

जवाब के अलावा: लगातार पहले डालने के लिए हमेशा की तरह कारण पकड़ लिखने की त्रुटियों मदद करने के लिए है: यदि आप गलत टाइप '==' के रूप में '=', तो संकलक शिकायत करेगा कि आप एक निरंतर को नहीं सौंप सकते। दूसरी तरफ (दाएं हाथ की ओर स्थिर), संकलक से एक शिकायत की गारंटी नहीं है। –