2013-09-23 12 views
5

जब + + के बीच कोई जगह है, तो अभिव्यक्ति का अर्थ क्या है "+ + a"। इस अभिव्यक्ति का मूल्यांकन कैसे किया जाता है?"+ + ए" अभिव्यक्ति का अर्थ क्या है?

int main() 
    { 
     int a = 3; 

     printf("%d %d", + +a, a); 
    } 

और a+++a का मूल्यांकन कैसे किया जाता है? क्या यह अनिर्धारित या अनिर्दिष्ट या कार्यान्वयन परिभाषित है?

उत्तर

4

++ ऑपरेटर में बीच में कोई स्थान होने पर, आप केवल यूनरी प्लस ऑपरेटर को दो बार लागू कर रहे हैं।

अभिव्यक्ति a+++a के बारे में, सी विनिर्देश का कहना है कि जब वहाँ इस तरह के एक अस्पष्टता है, जितना संभव हो उतना ( "लालची lexer" या "अधिक से अधिक मंच" नियम) चबाना। तो a+++a कि नियम, जैसे, z = y+++++x; एक अभिव्यक्ति z = y++ ++ +x; के रूप में पार्स किया जाएगा, जो अवैध है के अनुसार के रूप में a++ + a

मूल्यांकन किया जाता है (एक के बाद वेतन वृद्धि का परिणाम incrementable ही नहीं है)।

+4

'मैक्सिमल मर्च' नियम के रूप में, कुछ और अधिक ईमानदारी से भी जाना जाता है। –

+0

ध्यान दें कि जब दो '+' प्रतीकों के बीच एक जगह होती है, तो यह एक वृद्धि ऑपरेटर नहीं है; यह दो अलग '+' ऑपरेटरों है। परिभाषा के अनुसार, आपके पास '++' ऑपरेटर में कोई स्थान नहीं हो सकता है। –

8

यह दोपहर - दो बार है क्योंकि + a एक नो-ऑप है और इसे दोहराया जाता है।

a+++a को a++ + a के रूप में अनजाने में पार्स किया गया है, लेकिन निष्पादित होने पर अपरिभाषित व्यवहार की ओर जाता है।

ध्यान दें कि यदि कोड a = -3; सेट करता है, तो मुद्रित मान अभी भी -3 होगा, दो बार।

+1

बस एक नाइटपिक, '+' हमेशा एक एनओपी नहीं है, यह एक व्यापक प्रकार के रूपांतरण को भी मजबूर कर सकता है। –

+0

@ जेन्सगस्टेड: क्या कोई संदर्भ है जिसमें यूनरी '+' की उपस्थिति उस परिवर्तन को मजबूर करेगी जहां असीमित '+' की अनुपस्थिति में परिवर्तन नहीं होगा? हाथ से, मैं एक के बारे में नहीं सोच सकता। 'Printf()' उदाहरण में, यदि 'a'' char' या 'छोटा' था, तो 'int' में रूपांतरण इस पर ध्यान दिए बिना होगा कि' + 'वहां था (varargs तर्कों के इलाज के नियमों के कारण) । यदि 'ए = + ए 'जैसे असाइनमेंट थे, तो नामांकन रूप से आरएचएस पर' char' से 'int' कहने का रूपांतरण हो सकता है, लेकिन असाइनमेंट उस बार फिर से कम कर देगा, और यह' ए = ए; '। –

1

+a-a के विपरीत है।
अन्य शब्दों में, जहां -a का a, +a का विपरीत संकेत होगा, a के मौजूदा सकारात्मक/नकारात्मक चिह्न को पुनः पुष्टि करता है।

फिर, एक बाहरी सकारात्मक वहाँ अभी भी 3

में जिसके परिणामस्वरूप विपरीत संस्करण की जाएगी:

printf("%d %d",- -a,a); 

कौन सा "नकारात्मक नकारात्मक 3" ... जो फिर से +3 है किया जाएगा।

+1

दिया गया: 'ए = -3;', 'बी = + ए;' बी = एबी (ए) के समान नहीं है; '। पहले मामले में, 'बी'' -3' है; दूसरे ('abs()') मामले में, यह '3' है। –

+0

हम्म ने कभी इसके बारे में सोचा नहीं, लेकिन मुझे नहीं लगता कि + ए के विपरीत है, + हमेशा के मूल्य के बावजूद सकारात्मक होगा, लेकिन या तो सकारात्मक या नकारात्मक हो सकता है यानी दो नकारात्मक सकारात्मक बनाते हैं लेकिन दो सकारात्मक भी सकारात्मक हैं ... बस कहना है। –

+5

क्या + हमेशा सकारात्मक होगा? मुझे ऐसा नहीं लगता। गणितीय रूप से, + (- 3) _still_ -3 है ... – ppeterka

संबंधित मुद्दे