2016-11-06 9 views
9

यह अंकगणितीय परिचालनों के जावा के मूल्यांकन को समझने के लिए सैद्धांतिक प्रश्न है। चूंकि + और - की वही प्राथमिकता है, इसलिए मुझे समझ में नहीं आता कि जावा निम्नलिखित अभिव्यक्तियों का मूल्यांकन कैसे करता है (जहां दो ऑपरेटरों के बीच एक से अधिक + और - ऑपरेटर हैं)।एकाधिक + और - ऑपरेटरों के लिए जावा प्राथमिकता

public static void main(String[] args) { 
    int a = 1; 
    int b = 2; 
    System.out.println(a+-b); // results in -1 
    System.out.println(a-+b); // results in -1 
    System.out.println(a+-+b); // results in -1 
    System.out.println(a-+-b); // results in 3 
    System.out.println(a-+-+b); // results in 3 
    System.out.println(a+-+-b); // results in 3 
    System.out.println(a-+-+-b); // results in -1 
    System.out.println(a+-+-+b); // results in 3 
} 

जावा 8 भाषा विशिष्टता (§15.8.2) से: जब संख्यात्मक प्रकार के दो ऑपरेंड के लिए आवेदन किया, ऑपरेंड की राशि उत्पादन

द्विआधारी + ऑपरेटर इसके अलावा प्रदर्शन करती है।
द्विआधारी - ऑपरेटर दो संख्यात्मक संचालन के अंतर का उत्पादन करते हुए घटाव करता है।
[...]
यदि ऑपरेंड अभिव्यक्तियों का कोई दुष्प्रभाव नहीं है तो जोड़ एक कम्यूटिव ऑपरेशन है।
ऑपरेटर सहयोगी होते हैं जब ऑपरेंड एक ही प्रकार के होते हैं।

मैंने जो भी देखा, यह है कि हर बार # ऑपरेटर भी होता है, परिणाम वही होता है और आदेश कोई फर्क नहीं पड़ता। लेकिन जब # ऑपरेटर अजीब हैं, तो यह परिणाम को प्रभावित नहीं करता है। जैसे निम्नलिखित दो अभिव्यक्तियों में + से एक और - है, हालांकि परिणाम अलग है।

System.out.println(a-+-b); // results in 3 
System.out.println(a-+-+-b); // results in -1 

उस जानकारी के साथ मुझे अभी भी पैटर्न या जिस तरह से यह काम करता है, उसे नहीं देखते हैं।

+0

मुझे विश्वास * ए + -बी * को * ए + (-बी) * के रूप में निष्पादित किया जाता है। इसे जांचने के लिए –

+1

@ संकेत मकानी '--' और' ++ 'की अनुमति नहीं है क्योंकि जावा इसे वृद्धि/कमी ऑपरेशन के रूप में लेता है – ncw

उत्तर

9

गणित में, आप इसका मूल्यांकन कैसे करेंगे?

a - + - b 

कुछ कोष्ठक जोड़ने में मदद करता है:

a - (+ (-b)) 

हम ऐसा कर सकते हैं, क्योंकि इस पूर्वता के नियमों का उल्लंघन नहीं करता है।

तो हम को कम करने शुरू कर सकते हैं: + (-b) वास्तव में -b है, और a - -b वास्तव में a + b है, इसलिए परिणाम 1 + 2 = 3 है।

की दूसरी एक देखते हैं: स्वाभाविक रूप से गणित काम के

a - + - + - b 
a - (+ (- (+ (-b)))) 
a - (+ (- (-b))) 
a - (+ b) 
a - b 
1 - 2 = -1 

तो सरल नियमों।

2

मुझे विश्वास है कि - संकेत भाव नकारना:

int a = 1; 
int b = 2; 
System.out.println(a+(-b)); 
System.out.println(a+-b); 

दोनों प्रिंट -1। यह ऑरैकल दस्तावेज़ों से है:

यूनरी माइनस ऑपरेटर; एक अभिव्यक्ति

शून्य से बस बदलता है संख्या के हस्ताक्षर के बाद नकारता। यदि b नकारात्मक थे, तो a+-b3 वापस करेगा।

2

इसका मूल्यांकन यह है कि आप गणित में गणना और घटाव के साथ गणना कैसे करते हैं। आपके उदाहरण में आपकी सभी गणना छोटी संख्या a=1 से शुरू होती है, तो आपके पास - है, और + एक छोटी संख्या और बड़ी संख्या बी = 2 के बीच संकेत हैं। उदाहरण के लिए जब आप 1 -- 2 करते हैं, तो आप 1+2 कर रहे हैं क्योंकि 2 - संकेत एक दूसरे को रद्द करते हैं 1 + 2, 1 - 2 -1 होगा क्योंकि 2 (बड़ी संख्या में एक - चिह्न है, जो इसे नकारात्मक पूर्णांक बनाता है, 1 को नकारात्मक पूर्णांक में जोड़ता है एक

2

यह एक गणितीय मुद्दा प्रतीत होता है द्वारा अपने मूल्य बढ़ जाती है ... (- & - = +), (- & + = -) और (+ & + = +)

int a = 1; 
int b = 2; 
System.out.println(a+-b); // 1 +(-2) = 1-2 = -1 
System.out.println(a-+b); // 1-(+2) = 1-2 = -1 
System.out.println(a+-+b); // 1+-(+2) = 1-(+2) = 1-2 = 1 
System.out.println(a-+-b); // 1- + (-2) = 1- (-2) = 1+2 =3 
System.out.println(a-+-+b); // 1 - + - (+2) = 1 - - (+2) = 1-2 = -1 
System.out.println(a+-+-b); // 1+ - + (-2) =1 - + (-2) = 1+2 = 3 
System.out.println(a-+-+-b); // 1-+-+(-2) = 1 - - (-2) = 1 + (-2) = -1 
System.out.println(a+-+-+b); // 1 +- +- (+2) = 1 -- (+2) = 1+2 = 3 
संबंधित मुद्दे