C ++ संचालक प्राथमिकता और संबद्धता

इस ट्यूटोरियल में, हम उदाहरणों की मदद से C ++ में ऑपरेटर्स की पूर्ववर्तीता और संगति के बारे में जानेंगे।

सी ++ ऑपरेटर्स की वरीयता

यदि एक ही अभिव्यक्ति में कई ऑपरेटर हैं, तो एक साथ संचालन का मूल्यांकन नहीं किया जाता है। बल्कि, उच्च वरीयता वाले ऑपरेटरों ने पहले अपने कार्यों का मूल्यांकन किया है।

चलिए, हम एक उदाहरण पर विचार करते हैं:

 int x = 5 - 17 * 6; 

यहाँ, गुणा ऑपरेटर *घटाव ऑपरेटर की तुलना में उच्च स्तर की पूर्वता का है -। इसलिए, 17 * 6पहले मूल्यांकन किया जाता है।

नतीजतन, उपरोक्त अभिव्यक्ति के बराबर है

 int x = 5 - (17 * 6);

यदि हम 5 - 17पहले मूल्यांकन करना चाहते हैं , तो हमें उन्हें कोष्ठक के भीतर जोड़ना होगा :

 int x = (5 - 17) * 6;

उदाहरण 1: ऑपरेटर्स की वरीयता

 #include using namespace std; int main() ( // evaluates 17 * 6 first int num1 = 5 - 17 * 6; // equivalent expression to num1 int num2 = 5 - (17 * 6); // forcing compiler to evaluate 5 - 17 first int num3 = (5 - 17) * 6; cout << "num1 = " << num1 << endl; cout << "num2 = " << num2 << endl; cout << "num3 = " << num3 << endl; return 0; )

आउटपुट

 num1 = -97 num2 = -97 num3 = -72

नोट: चूँकि C ++ में बहुत सारे ऑपरेटर हैं, जो पूर्व स्तर के कई स्तरों के साथ हैं, यह अत्यधिक अनुशंसा की जाती है कि हम अपने कोड को अधिक पठनीय बनाने के लिए कोष्ठक का उपयोग करें ।

सी ++ ऑपरेटर्स की वरीयता तालिका

निम्न तालिका (cppreference.com से ली गई) C ++ ऑपरेटरों की पूर्वता दर्शाती है। वरीयता स्तर 1 सर्वोच्च प्राथमिकता के ऑपरेटरों को दर्शाता है, जबकि वरीयता स्तर 17 सबसे कम प्राथमिकता वाले ऑपरेटरों को दर्शाता है।

संघ की संपत्ति पर शीघ्र ही चर्चा की जाएगी।

पूर्वता ऑपरेटर विवरण संबद्धता
1 है :: स्कोप रिज़ॉल्यूशन बाएं से दाएं
a ++
a--
टाइप ()
टाइप ()
(
a) (a)

->
प्रत्यय / पोस्टफिक्स इन्क्रीमेंट
Suffix / postfix decrement
फंक्शन कास्ट
फंक्शन कास्ट
फंक्शन कॉल
सब्स्क्राइब्ड
मेंबर ऑब्जेक्ट से
सदस्य का एक्सेस एक्सेस ऑब्जेक्ट ptr
बाएं से दाएं
++ a
--a
+ a
-a
!
~
(प्रकार)
* a
& a
sizeof
co_await
नया नया ()
डिलीट डिलीट ()
उपसर्ग वृद्धि वेतन
उपसर्ग घटाव
यूनरी प्लस
यूनरी माइनस
लॉजिकल
नॉट बिटवाइंड नॉट
सी कास्ट
इनडायरेक्टेशन (डीरेफेरेंस)
एड्रेस-ऑफ
-साइज़ ऑफ
वेट-एक्सप्रेशन-
डायनामिक मेमोरी एलोकेशन
डायनामिक मेमोरी डीक्लोकेशन
दाएं से बाएं
। *
-> *
सदस्य वस्तु चयनकर्ता
सदस्य सूचक चयनकर्ता
बाएं से दाएं
ए * बी
/ ए / बी
% बी
गुणन
विभाग
मापांक
बाएं से दाएं
ए + बी
ए - बी
जोड़
घटाव
बाएं से दाएं
<<
>>
बिटवाइस लेफ्ट शिफ्ट
बिटवाइज राइट शिफ्ट
बाएं से दाएं
<= < तीन तरह से तुलना ऑपरेटर बाएं से दाएं
<
<=
>
> =
ग्रेटर की तुलना में ग्रेटर से
कम या उसके बराबर या उससे कम
बाएं से दाएं
१० ==
! =
के बराबर
नहीं के बराबर
बाएं से दाएं
1 1 और बिटवाइज़ और बाएं से दाएं
१२ ^ बिटवाइज़ XOR बाएं से दाएं
१३ | बिटवार या बाएं से दाएं
१४ && तार्किक और बाएं से दाएं
१५ || तार्किक या बाएं से दाएं
१६ ए ? b: c
फेंक
co_yield
=
+ =
- =
* =
/ =
% =
<< =
>> = =
& =
= = =
|
Ternary Conditional
फेंक संचालक
उपज अभिव्यक्ति (C ++ 20)
असाइनमेंट
एडिशन असाइनमेंट
सबसिस्टम निष्कर्षण असाइनमेंट
गुणन असाइनमेंट
डिवीजन असाइनमेंट
Modulus Assignment
बिटवाइंस शिफ्ट लेफ्ट असाइनमेंट
Bitwise शिफ्ट राइट असाइनमेंट
बिटवाइंड और असाइनमेंट
Bitwise XOR असाइनमेंट
बिटवाइज़ या असाइनमेंट
दाएं से बाएं
१। , कोमा संचालक बाएं से दाएं

C ++ ऑपरेटर्स एसोसिएटिविटी

ऑपरेटर सहक्रियाशीलता वह दिशा है जिससे एक अभिव्यक्ति का मूल्यांकन किया जाता है। उदाहरण के लिए,

 int a = 1; int b = 4; // a will be 4 a = b;

a = 4;कथन पर एक नज़र डालें । =ऑपरेटर की सहानुभूति दाईं से बाईं ओर होती है। इसलिए, बी का मान एक को सौंपा गया है, और दूसरी दिशा में नहीं।

साथ ही, कई ऑपरेटरों के पास समान स्तर की पूर्वता हो सकती है (जैसा कि हम उपरोक्त तालिका से देख सकते हैं)। एक ही पूर्वता स्तर के कई ऑपरेटरों एक अभिव्यक्ति में उपयोग किया जाता है, वे उनके के अनुसार मूल्यांकन कर रहे हैं संबद्धता

 int a = 1; int b = 4; b += a -= 6;

ऑपरेटरों +=और -=ऑपरेटरों दोनों की एक ही मिसाल है। चूंकि इन ऑपरेटरों की सहानुभूति दाईं से बाईं ओर है, यहां बताया गया है कि अंतिम विवरण का मूल्यांकन कैसे किया जाता है।

  • a -= 6पहले मूल्यांकन किया जाता है। इसलिए, एक -5 होगा
  • फिर, b += -5मूल्यांकन किया जाएगा। इसलिए, बी -1 होगा

उदाहरण 2: ऑपरेटर्स एसोसिएटिविटी

 #include using namespace std; int main() ( int a = 1; int b = 4; // a -= 6 is evaluated first b += a -= 6; cout << "a = " << a << endl; ; cout << "b = " << b; )

आउटपुट

 a = -5 बी = -1

दिलचस्प लेख...