2012-07-23 14 views
5

& & और ||, क्या वे हमेशा 0 या 1 का मूल्यांकन करते हैं? या सही स्थिति के लिए, 1 से अधिक संख्या संभव है? मैं पूछ रहा हूं क्योंकि मैं इस तरह एक वैरिएबल असाइन करना चाहता हूं।क्या हालत अभिव्यक्ति हमेशा सी में 0 या 1 का मूल्यांकन करती है?

int a = cond1 && cond2; 

मैं सोच रहा था कि अगर मैं निम्नलिखित के बजाय क्या करना चाहिए।

int a = (cond1 && cond2)? 1:0; 
+0

वास्तव में, आपकी प्रमुख आवश्यकता क्या है? आप इन चर को असाइन करने जा रहे हैं क्यों? –

उत्तर

14

तार्किक ऑपरेटरों (&&, ||, और !) सभी का मूल्यांकन या तो 1 या 0 करने के लिए।

C99 §6.5.13/3:

&& ऑपरेटर 1 उपज जाएगा अगर इसकी ऑपरेंड के दोनों 0 को असमान तुलना; अन्यथा, यह 0 उत्पन्न करता है। परिणाम int टाइप किया गया है।

C99 §6.5.14/3:

|| ऑपरेटर 1 उपज जाएगा अगर इसकी ऑपरेंड के दोनों 0 को असमान तुलना; अन्यथा, यह 0 उत्पन्न करता है। परिणाम int टाइप किया गया है।

C99 6.5.3.3/5:

तार्किक निषेध ऑपरेटर ! का परिणाम 0 है अगर इसकी संकार्य के मूल्य 0, 1 को असमान तुलना अगर इसकी संकार्य के मूल्य के बराबर तुलना 0। परिणाम int टाइप किया गया है। अभिव्यक्ति! ई बराबर है (0 == ई)।

+0

(मेरे पास सी 11 की प्रतिलिपि नहीं है, लेकिन मुझे यकीन है कि लॉजिकल ऑपरेटरों का विनिर्देशन नहीं बदला है।) –

0
'&&' 
    The logical-AND operator produces the value 1 if both operands have nonzero 
    values. If either operand is equal to 0, the result is 0. If the first operand of a 
    logical-AND operation is equal to 0, the second operand is not evaluated. 

'||' 
     The logical-OR operator performs an inclusive-OR operation on its operands. 
    The result is 0 if both operands have 0 values. If either operand has a nonzero 
    value, the result is 1. If the first operand of a logical-OR operation has a nonzero 
    value, the second operand is not evaluated. 

तार्किक-और और तार्किक-या अभिव्यक्ति की ऑपरेंड का मूल्यांकन बाएं से दाएं कर रहे हैं। यदि ऑपरेशन के परिणाम को निर्धारित करने के लिए पहले ऑपरेंड का मूल्य पर्याप्त है, तो दूसरे ऑपरेंड का मूल्यांकन नहीं किया जाता है। इसे "शॉर्ट-सर्किट मूल्यांकन" कहा जाता है। पहले ऑपरेंड के बाद एक अनुक्रम बिंदु है।

धन्यवाद, :)

+2

और यह सवाल का जवाब नहीं देता है। –

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