Precedence of Operators in C Language

Precedence of Operators in C Language

Precedence of Operators in C: “सी” भाषा में हर Operator का एक प्राथमिकता का क्रम होता है। जिससे गणनाओं में होने वाली परेशानियां समाप्त हो जाती हैं। उदाहरण के लिए निम्न Expression देखें:

11 + 23+20/6 – 4 = 5
11 + 23+20/6 – 4 = 27
11 + 23+20/6 – 4 = 33.333

जिस परिणाम की हमें जरूरत है, वह इनमें से कौनसा है, ये पता लगाना बहुत ही मुश्किल हो जाएगा क्योंकि तीनों ही मान सही हैं। ऐसे में एक ऐसे क्रम की आवश्‍यकता हुई, जिससे यह पता चल सके कि पहले कौनसी गणना होगी व बाद में कौनसी, ताकि हमें प्राप्त होने वाला मान वही हो जो हम चाहते हैं।

“सी” में इस प्रकार की परेशानी से बचने के लिए Operators को एक प्राथमिकता क्रम में व्‍यवस्थित किया गया। इसमें गणनाए इसी क्रम में होती हैं। जो Operator प्राथमिकता क्रम में पहले आता है, उसके Operands की गणना पहले होती है और जो Operator प्राथमिकता क्रम में बाद में आता है, उसके Operands की गणना बाद में होती है। ये प्राथमिकता क्रम सारणी निम्नानुसार है:

CategoryOperatorOperationsPrecedenceAssociatively
Highest Precedence(  )
[  ]
->
.
Function Call
Array Subscript
Reference
Dot Operator
1Left
To
Right
Unary!
~
+

++

&
*
sizeof
type
Logical Negation
Bit wise 1st complement
Unary Plus
Unary Minus
Increment
Decrement
Address
Indirection
Size of an Object
Type Cast Conversion
2Right

To

Left

Multiplication*
/
%
Multiply
Divide
Reminder
3Left

To

Right

Additive+
Binary Plus
Binary Minus
4Left To
Right
Shift<<
>>
Shift Left
Shift Right
5Left To
Right
Relational<
<=
>
>=
Less Than
Less Than or equal to
Greater Than
Greater Than or Equal to
6Left
To
Right
Equality= =
!=
Equal To
Not Equal To
7Left To
Right
Bit wise AND&Bit wise AND8L to R
Bit wise XOR^Bit wise XOR9L to R
Bit wise OR|Bit wise OR10L to R
Logical AND&&Logical AND11L to R
Logical OR| |Logical OR12L to R
Conditional? :Ternary Operator13L to R
Assignment=
*=
/=
%=
+=
– =
& =
^ =
| =
<<
>>
Simple Assignment
Assign Product
Assign Quotient
Assign Reminder
Assign Sum
Assign Difference
Assign Bit wise AND
Assign Bit wise XOR
Assign Bit wise OR
Assign Left Shift
Assign Right Shift
14R TO L
Comma,Evaluate15L to R

Computer में जब किसी Arithmetical Expression Calculation के लिए Perform होता है, तब उस Expression में Use किए गए विभिन्न प्रकार के Operators अपने Direction व प्राथमिकता क्रम के अनुसार Execute होते हैं। कोई Expression जिस तरह से विभिन्न Steps में प्राथमिकता क्रम व Direction (Precedence and Associativity)  के आधार पर Perform होकर एक Result Generate करता है, उन Steps की श्रृंखला को Operations की Hierarchy (Hierarchy of Operations) कहते हैं।

कोई Expression किस क्रम व दिशा के आधार पर Execute होकर Accurate Result Generate करेगा, इसके लिए “C” Language में कुछ नियम निर्धारित किए गए हैं। ये नियम निम्नानुसार हैं:

  1. किसी Expression में यदि Parenthesis का प्रयोग किया गया हो, तो सबसे पहले उस Parenthesis का Expression Calculate होता है। साथ ही यदि एक से ज्‍यादा Parenthesis Nested हों, तो सबसे पहले Inner Most यानी सबसे अन्दर का Parenthesis Solve होता है और फिर क्रम से बाहर के Parenthesis Solve होते हैं।
  2. जो Operator प्राथमिकता क्रम की सारणी में पहले आता है, वह Operator अपना Calculation पहले करता है तथा जो Operator प्राथमिकता क्रम सारणी में बाद में आता है, वह अपना Operation बाद में Perform करता है। ठीक इसी तरह से सभी Operators उसी दिशा में Operations Perform करते हैं, जिस दिशा में उसे प्राथमिकता क्रम सारणी में दर्शाया गया है।

Example:

 x = (11 * 2) / 3 + 5 / 5 – 1 + 6 * 6 – 4Expression
Step 1x = (22 / 3) + 5 / 5 – 1 + 6 * 6 – 4Operation *
Step 2x = 7 + (5 / 5) – 1 + 6 * 6 – 4Operation /
Step 3x = 7 + 1 – 1 + (6 * 6) – 4Operation /
Step 4x = (7 + 1) – 1 + 36 – 4Operation *
Step 5x = (8 – 1) + 36 – 4Operation +
Step 6x = (7 + 36) – 4Operation –
Step 7x = (43 – 4)Operation +
Step 8(x = 39)Operation –

किसी भी Arithmetical Expression में यदि *, / या % में से कोई Operator हो, तो सबसे पहले वही Operator अपना काम करता है। उसके बाद यदि Expression में + या – में से कोई Operator हो तो वह Operator अपना काम करता है और सबसे अन्त में = Operator अपना काम करता है। प्राथमिकता सारणी में हम देख सकते हैं कि केवल Unary व Assignment Operators ही Right To Left Operation Perform करते हैं, शेष सभी Operators Left To Right दिशा में अपना काम करते हैं।

उदाहरण वाले Expression में हम देख सकते हैं कि इसमें विभिन्न प्रकार के Operators Result Generate करने के लिए Involved हैं। चूंकि, Unary व Assignment Operators के अलावा सभी प्रकार के Operators Left To Right दिशा में Operation Perform करते हैं, इसलिए इस Expression सबसे पहले (11 * 2) का Expression Execute होता है, जो मान 22 Generate करता है।

अगले Step में (22 / 3) Expression Execute होता है, जो मान Generate करता है। चूंकि इस Expression में अभी भी * व / Operators हैं, इसलिए अगले Statement में Left To Right चलते हुए जो Operator सबसे पहले मिलता है वह (5 / 5) Expression में होता है, इसलिए अब ये Expression Execute होता है।

फिर Left To Right आगे बढते हुए अगले Operation में (6 * 6) मिलता है, और अपना काम पूरा करके 36 Generate करता है। अब हम देख सकते हैं कि चौथे Step वाले Expression में *, / या % में से कोई भी Operator नहीं है, इसलिए फिर से Left To Right चलते हुए अब + व – का Expression Execute होता है और इस Expression में सबसे पहले (7 + 1) Execute होकर Generate करता है। फिर पांचवे Statement में (8 – 1) से Generate होता है। फिर छठे Step में (7 + 36) से 43 Generate होता है और सातवें Step में (43 – 4) से 39 Generate होता है।

चूंकि Assignment Operator सबसे बाद में Execute होता है और Right To Left Execute होता है, इसलिए अन्तिम Step में (x = 39) Expression Execute होता है और Variable में मान 39 Store हो जाता है।

No comments: