Precedence and Associativity of Operators
पीछे वाले 8 अध्याय से स्पष्ट होता है कि "सी लैंग्वेज"(C language) में बहुत से ऑपरेटर(operator) हैं। ऐसे में यदि कोई ऐसा एक्सप्रेशन(expression) हो जिसमें 1 से अधिक ऑपरेटर(operator) हो तो यह प्रश्न उठता है कि पहले कौन से ऑपरेटर(operator) का हल निकाला जाए। इसी प्रश्न का उत्तर देता है प्रेसिडेंस रूल(presidents rule)। अन्य शब्दों में प्रेसिडेंस रूल से ऐसे ऐसे नियम से हैं जो यह तय करता है कि यदि एक एक्सप्रेशन(expression) में एक से अधिक ऑपरेटर(operator) हो तो पहले कौन सी श्रेणी के ऑपरेटर(operator) का हल निकाला जाएगा।
जब एक ही expression में एक ही श्रेणी के एक से अधिक ऑपरेटर हो तो एसोसिएटिविटी( Associativity) का नियम यह बताता है कि पहले इनमें से पहले किसे हल किया जाए। यह दाएं से बाएं या बाएं से दाएं हो सकता है
Operator | Description | Associativity |
---|---|---|
() [] - > | Selectors | left to right |
! ~ ++ -- + - (type)* sizeof | Unary | Right to Left |
* / % | Multiplicative | Left To Right |
+ - | Additive | Left to right |
<< >> | bitwise | left to right |
< <= > >= | Comparison | left to Right |
== != | Comparison | left to Right |
& | bitwise | Left to Right |
^ | Bitwise | Left to Right |
| | Bitwise | Left to Right |
&& | Boolean | Left to Right |
|| | Boolean | Left to Right |
? : | Conditional | Right to left |
= += -= *= %= &= ^= |= <<= >>= | Assignment | Right to Left |
, | comma | Left to Right |
Type Casting
Data के type में परिवर्तन दो प्रकार का होता हैं।
- Implicit type Casting(स्वतः होने वाला टाइप परिवर्तन)
- Explicit type Casting(User द्वारा करवाया जाने वाला टाइप परिवर्तन)
(i) implicit Type casting
जब दो समान data type वाली वैल्यू पर operation किया जाता है तो उसका परिणाम समान data type में आता है उदाहरण के लिए यदि दो integer value को जोड़ा जाएगा तो परिणाम स्वरूप प्राप्त होने वाली संख्या भी integer होगी।
किंतु यदि expression का एक ऑपरेंड integer होता दूसरा float हो तो परिणाम किस data type में आएगा। सम्मान सामान्य शब्दों में यह कहा जा सकता है कि यदि किसी expression में एक से अधिक प्रकार के data type प्रयुक्त है तो सामान्यता परिणाम उस data type में होगा, जो memory में अधिक स्थान घेरता है।
अधिकांशतः इसके लिए compiler पहले अन्य data type(डाटा टाइप) तो उस data type(डाटा टाइप) में परिवर्तन कर देता है जो मेमोरी में अधिक स्थान घेरता है। इसके पश्चात expression(एक्सप्रेशन) के परिणाम की गणना की जाती है इस प्रकार यह कहा जा सकता है कि आवश्यकता पड़ने पर compiler automatic डाटा टाइप में परिवर्तन कर देता है।
उदाहरण के लिए।
Output:-
i = 254, f = 254.000000
मान लीजिए कि वेरिएबल एक इंटीरियर वेरिएबल k में वैल्यू 7, फ्लोट वेरिएबल m में वैल्यू 5.5 तथा कैरेक्टर वैल्यू c में वैल्यू 'A' स्टोर है। ध्यान रहे कि 'A' की ascii वैल्यू 65 होती है। इसके आधार पर विभिन्न एक्सप्रेशन तथा उसके परिणाम निम्न टेबल में दिए गए हैं।
Expression | result | data type |
---|---|---|
k + m | 12.5 | float |
k + c | 72 | Interger |
(k + c) - (2*m/5) | 69.8 | float |
(ii)Explicit Type casting( यूजर द्वारा करवाया जाने वाला टाइप परिवर्तन ):-
स्वतः डाटा परिवर्तन के अलावा user(programmer) भी यह बताता है कि data type पर परिवर्तन कब किया जाना है। इसे यूजर डिफाइंड डाटा(user defined data type) परिवर्तन भी कहा जाता है। जिसे तकनीकी शब्दों में explicit Type casting(एक्सप्लिसिट टाइप कास्टिंग) कहा जाता है। इसका प्रारूप निम्न प्रकार है:-
(DataTypeToCast) Opearand
उदाहरण:-
Output:-
Result is : 40.750000
Result is : 40
Explain example:-
ऊपर दिए गए Example में a/2 की स्थिति में पहले 2 float में परिवर्तित होगा फिर गणना होगी। वही (int)a/2 की स्थिति में पहले a integer में परिवर्तित किया जाएगा फिर इसे इंटीरियर 2 से विभाजित किया जाएगा। जब a integer में परिवर्तित होगा तो उसका decimal वाला हिस्सा (.5) गायब हो जाएगा और उसकी वैल्यू सिर्फ 80 ही रह जाएगी। तत्पश्चात 80 को 2 से विभाजित करना 40 प्राप्त होगा।
0 Comments