Pages

Saturday, 30 July 2016

OPerator Precedence and associativity in C



Precedence of arithmetic Operators

Precedence ऑफ अरिथमेटिक का तात्पर्य, अरिथमेटिक आपरेटर के क्रियान्वित होने के क्रम तथा दिशा से संबन्धित हैं। कोई एरिथमेटिक एक्स्प्रेशन बिना ब्रेकेट के बाए से दाए को क्रियान्वित होती हैं। सी भाषा मे दो प्रकार के priority लेवेल्स बनाए गए हैं।

High priority -> जिनमे गुणा (*), भाग (/) और मॉड्युलेशन (%) को किसी भी एक्स्प्रेशन मे सबसे पहले प्रोसेस किया जाता हैं।

Low priority -> जिनमे प्लस (+) और माइनेस (-) शामिल हैं, इनसे गुणा, भाग और मोड के बाद प्रोसेस किया जाता हैं।

उदाहरण के लिए हमारे पास यह एक्स्प्रेशन हैं x = a - b / 3 + c* 2 -1
जहां a = 9, b = 12 और c = 3 इसका मतलब ऊपर वाला एक्स्प्रेशन कुछ इस रहह हुआ a = 9 – 12 / 3 + 3 * 2 – 1 जिसे हम दो pass मे करेंगे।

First Pass
चरण पहला : 9 – 4 + 3 * 2 – 1
दूसरा चरण : 9 – 4 + 6 – 1

Second Pass
तीसरा चरण : 5 + 6 – 1
चौथा चरण : 5 + 5
पंचवा चरण : 10

हालांकि किसी एक्स्प्रेशन मे जब कोष्टक (ब्रेकेट) लगा हो तो ऑपरेटर की प्राथमिकता बादल जाती हैं जैसे किउपर वाले एक्स्प्रेशन मे अगर हम ब्रेकेट लगा दे तो उसमे कैसे आपरेटर की प्राथमिकता बदलती हैं देखते हैं। उदाहरण के लिए हमारे पास यह एक्स्प्रेशन हैं x = 9 - 12 / (3 + 3) * (2 -1)
अब 
देखिये की कैसे सबसे ऊपर दिये एक्स्प्रेशन मे हमने इस बार ब्रेकेट लगा दिया हैं, तो उसका क्रियान्वयन कैसे होगा।

First Pass
पहला चरण : 9 – 12 / 6 * (2 – 1 )
दूसरा चरण : 9 – 12 / 6 * 1

Second Pass
तीसरा चरण : 9 – 2 * 1
चौथा चरण : 9 – 2
पंचवा चरण : 7

नीचे दिये गए टेबल मे आप आपरेटर का विवरण तथा उनके प्रोसेस होने की दिशा के बारे मे जानकारी पाएंगे।  जिसमे यह बताया गया हैं की कौनसा सा आपरेटर किस दिशा से प्रोसेस होता हैं। और उनकी क्या प्राथमिकता हैं। प्राथमिकता को दर्शाने के लिए हमने यहाँ पर रैंक की सहायता ली हैं सबसे ज्यादा प्राथमिकता वाले आपरेटर को 1 rank दिया हैं उसके बाद वाले को 2 और इसी तरह प्राथमिकता के आधार पर उन्हे नंबर दिये गए हैं।

Operator
Description
Associativity
Precedence
( )
[ ]
Parentheses (function call) (see Note 1)
Brackets (array subscript)
left-to-right
1
++ --
+ -
! ~
(type)

*
&
sizeof
Prefix increment/decrement
Unary plus/minus
Logical negation/bitwise complement
Cast (convert value to temporary value of type)
Dereference
Address (of operand)
Determine size in bytes on this implementation
right-to-left
2
*  /  %
Multiplication/division/modulus
left-to-right
3
+  -
Addition/subtraction
left-to-right
4
<<  >>
Bitwise shift left, Bitwise shift right
left-to-right
5
<  <=
>  >=
Relational less than/less than or equal to
Relational greater than/greater than or equal to
left-to-right
6
==  !=
Relational is equal to/is not equal to
left-to-right
7
&
Bitwise AND
left-to-right
8
^
Bitwise exclusive OR
left-to-right
9
|
Bitwise inclusive OR
left-to-right
10
&&
Logical AND
left-to-right
11
| |
Logical OR
left-to-right
12
? :
Ternary conditional
right-to-left
13
=
+=  -=
*=  /=
%=  &=
^=  |=
<<=  >>=
Assignment
Addition/subtraction assignment
Multiplication/division assignment
Modulus/bitwise AND assignment
Bitwise exclusive/inclusive OR assignment
Bitwise shift left/right assignment
right-to-left
14
,
Comma (separate expressions)
left-to-right
15

ऊपर दिये टेबल मे सभी आपरेटर की एसोसिएटिविटी (सहचारिता) और उसकी प्रेसिडेंस (प्राथमिकता) को दर्शाया गया हैं, जैसा की आप देख सकते हैं की टेबल मे comma को 15 प्रेसिडेंस रैंक दी गई हैं जिसका मतलब हैं की comma लो प्राइओरिटी (low priority) वाला आपरेटर हैं जो किसी भी एक्स्प्रेशन मे सबसे अंतिम मे प्रोसेस किया जाएगा।

No comments:
Write comments

Popular Posts

Recommended Posts ×