इस ट्यूटोरियल में हम आपको C # में ऑपरेटर की पूर्ववर्तीता और संगति के बारे में जानेंगे। यह हमें एक विचार देगा कि C # संकलक द्वारा एक अभिव्यक्ति का मूल्यांकन कैसे किया जाता है।
सी # संचालक प्राथमिकता
ऑपरेटर पूर्वता नियमों का एक समूह है जो परिभाषित करता है कि अभिव्यक्ति का मूल्यांकन कैसे किया जाता है। C # में, प्रत्येक C # ऑपरेटर की एक निर्धारित प्राथमिकता है और इन प्राथमिकताओं के आधार पर, अभिव्यक्ति का मूल्यांकन किया जाता है।
उदाहरण के लिए , गुणा (*)
ऑपरेटर की पूर्ववर्तीता अतिरिक्त (+)
ऑपरेटर की पूर्ववर्तीता से अधिक है। इसलिए, गुणा से जुड़े ऑपरेशन को जोड़ने से पहले किया जाता है।
नीचे दिए गए कथन पर एक नज़र डालें।
int x = 4 + 3 * 5;
इस कथन को निष्पादित करने के बाद x का मूल्य क्या होगा?
ऑपरेंड और 3
के साथ जुड़ा हुआ है । जैसा कि पहले कहा गया है, गुणन में जोड़ की तुलना में अधिक पूर्वता होती है। इसलिए, इसके बजाय ऑपरेशन किया जाता है । चर x का मान होगा ।+
*
3 * 5
4 + 3
19
यदि इसके अलावा एक उच्च पूर्वता 4 + 3
होगी , तो पहले मूल्यांकन किया जाएगा और x का मान होगा 35
।
संचालक वरीयता तालिका
ऑपरेटर की पूर्वता जितनी अधिक होगी, वह तालिका में उतना ही अधिक दिखाई देगा
सी # संचालक प्राथमिकतावर्ग | संचालक |
---|---|
उपसर्ग वृद्धि और विकृति | ++, - |
उपसर्ग वृद्धि, कमी और असमानता | ++, -, +, -,;, ~ |
गुणक | *, /,% |
योजक | + - |
खिसक जाना | <> |
संबंधपरक | <,> = = |
समानता | ==; =! |
बिटवाइज़ और | और |
बिटवाइज़ XOR | ^ |
बिटवार या | | |
तार्किक और | && |
तार्किक या | || |
टर्नरी | ? : |
असाइनमेंट | =, + =, - =, * =, / =,% =, & =, | = =, =, <> = | |
असाइनमेंट ऑपरेटर्स में सबसे कम पूर्वता होती है, जबकि पोस्टफिक्स इंक्रीमेंट और डिक्रीमेंट ऑपरेटर्स में सबसे ज्यादा प्रीसिडेंस होता है।
उदाहरण 1: ऑपरेटर की प्राथमिकता
using System; namespace Operator ( class OperatorPrecedence ( public static void Main(string() args) ( int result1; int a = 5, b = 6, c = 4; result1 = --a * b - ++c; Console.WriteLine(result1); bool result2; result2 = b>= c + a; Console.WriteLine(result2); ) ) )
जब हम प्रोग्राम चलाते हैं, तो आउटपुट होगा:
19 झूठा
आइए समझते हैं कि कार्यक्रम में अभिव्यक्ति का मूल्यांकन कैसे किया जाता है।
की पूर्वता --
और ++
से अधिक है *
, और की पूर्वता से *
अधिक है -
। इसलिए बयान,
परिणाम 1 = - ए * बी - ++ सी;
के बराबर है
result1 = ((--a) * b) - (++ c);
कोष्ठक के अंदर की अभिव्यक्ति का हमेशा मूल्यांकन किया जाता है कि कोई फर्क नहीं पड़ता कि इसके बाहर ऑपरेटरों की पूर्वता क्या है।
- सबसे पहले, (--a) के परिणामस्वरूप मूल्यांकन किया जाता है
4
। - तब (++ c) का मूल्यांकन किया जाता है
5
। - अब, (a * b) के परिणामस्वरूप मूल्यांकन किया जाता है
24
। - अंत में, घटाव किया जाता है जिसके परिणामस्वरूप
19
। - इसलिए result1 का अंतिम मूल्य होगा
19
।
अगली अभिव्यक्ति में, की पूर्वता से +
अधिक है >=
। तो, c और a को पहले जोड़ा जाता है और बी का उत्पादन करने के लिए b के साथ तुलना की जाती है false
।
सी # में ऑपरेटरों की सहयोगीता
पिछले अनुभाग में, हमने ऑपरेटर पूर्वता के बारे में चर्चा की। यदि अलग-अलग पूर्वता वाले दो ऑपरेटरों का उपयोग किया जाता है, तो उच्च पूर्वता वाले ऑपरेटर का मूल्यांकन पहले किया जाता है।
लेकिन क्या होगा अगर दोनों संचालकों में एक जैसी मिसाल हो?
ऐसे मामले में, अभिव्यक्ति का मूल्यांकन ऑपरेटर की सहानुभूति (बाएं से दाएं या बाएं से दाएं) के आधार पर किया जाता है।
उदाहरण के लिए:
int a = 5, b = 6, c = 3; int result = a * b / c;
इधर, दोनों *
और /
एक ही पूर्वता है। लेकिन चूंकि इन ऑपरेटरों की सहानुभूति बाएं से दाएं है , a * b
पहले मूल्यांकन किया जाता है और फिर विभाजन किया जाता है। इस अभिव्यक्ति का अंतिम परिणाम होगा 10
।
इस विशेष उदाहरण में, संघात्मकता वास्तव में मायने नहीं रखती है। क्योंकि गुणा करने से पहले यदि विभाजन किया गया, तो भी परिणाम अप्रभावित रहेगा।
आइए एक और उदाहरण देखें।
int a = 5, b = 6, c = 3; a = b = c;
=
ऑपरेटर की सहानुभूति दाईं से बाईं ओर होती है । तो c (यानी 3
) का मान b को सौंपा गया है, और फिर b का मान a को सौंपा गया है। इसलिए इस कथन को निष्पादित करने के बाद, a, b और c का मान होगा 3
।
नीचे दी गई तालिका में सी # ऑपरेटरों की सहानुभूति दिखाई गई है:
सी # ऑपरेटरों की संबद्धतावर्ग | संचालक | संबद्धता |
---|---|---|
उपसर्ग वृद्धि और विकृति | ++, - | बाएं से दाएं |
उपसर्ग वृद्धि, कमी और असमानता | ++, -, +, -,;, ~ | दाएं से बाएं |
गुणक | *, /,% | बाएं से दाएं |
योजक | + - | बाएं से दाएं |
खिसक जाना | <> | बाएं से दाएं |
संबंधपरक | <,> = = | बाएं से दाएं |
समानता | ==; =! | बाएं से दाएं |
बिटवाइज़ और | और | बाएं से दाएं |
बिटवाइज़ XOR | ^ | बाएं से दाएं |
बिटवार या | | | बाएं से दाएं |
तार्किक और | && | बाएं से दाएं |
तार्किक या | || | बाएं से दाएं |
टर्नरी | ? : | दाएं से बाएं |
असाइनमेंट | =, + =, - =, * =, / =,% =, & =, | = =, =, <> = | | दाएं से बाएं |
लगभग सभी ऑपरेटरों में बाएं से दाएं की समरूपता होती है। दाईं से बाईं ओर समरूपता वाले ऑपरेटर हैं:
- गैर-संचालक
- उपसर्ग वृद्धि और कमी ऑपरेटर
- टर्नरी ऑपरेटर
- असाइनमेंट ऑपरेटर्स
उदाहरण 2: ऑपरेटर्स की संबद्धता
using System; namespace Operator ( class OperatorPrecedence ( public static void Main(string() args) ( int a = 5, b = 6, c = 3; int result = a * b / c; Console.WriteLine(result); a = b = c; Console.WriteLine("a = (0), b = (1), c = (2)", a, b, c); ) ) )
जब हम प्रोग्राम चलाते हैं, तो आउटपुट होगा:
10 ए = 3, बी = 3, सी = 3