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