在学习Java时,我遇到了表达式4 + 20 / (3 - 1) * 2
。
在Eclipse中,此表达式的计算结果为24。
因此,它可以解释为4 + ((20 / (3 - 1)) * 2)
。
为什么将4 + 20 /(3 - 1)* 2解释为4 + (20) / ((3 - 1) * 2)
会导致9?
非常感谢你的帮助。
更新
在我的问题中更具体,数学上,除非我误解或误解,4 + 20 /(3 - 1)* 2是模棱两可的,因为我从乔治·伯格曼的这篇论文https://math.berkeley.edu/~gbergman/misc/numbers/ord_ops.html中得知,加州大学伯克利分校教授。可以将其解释为4 + ((20 / (3 - 1)) * 2)
或4 + (20) / ((3 - 1) * 2)
。
然而,在Java中,4 + ((20 / (3 - 1)) * 2)
解释似乎是正确的,而4 + (20) / ((3 - 1) * 2)
解释似乎是错误的。在两种解释中,首先计算括号中的内容,然后执行乘法和除法,最后执行加法和减法。我在两者之间看到的唯一区别是,在正确的解释中,首先完成解释,而在错误的解释中,首先进行乘法。
我的问题是在Java中,什么是使一种解释正确而另一种解释错误的关键因素。
谢谢!
答案 0 :(得分:2)
操作顺序表明首先评估最内部括号,然后从左到右进行乘法和除法,然后从左到右进行加法和减法。从左到右的原则在这里很重要。这种操作顺序是数学中的标准,Java(以及大多数语言)遵循数学标准。 Order of Operations
答案 1 :(得分:1)
嗯,首先评估括号。
所以4+20/2*2
然后分裂
所以4+10*2
然后乘法
所以4+20
意思是最终答案是24。
这个答案独立于编程语言,并且基于操作顺序或"PEMDAS"
答案 2 :(得分:1)
解释你描述的方式没有错。一旦开始包括括号,您实际上绕过了算术运算的通常顺序。如果没有括号,则计算算术运算的通常顺序就会出现。这样数学家就可以以一致的方式进行数学计算,并以一致的方式完成计算。
答案 3 :(得分:0)
Java有一个叫做'运算符优先'的东西请看这里的一些例子precedence of operators
但是,您可以通过适当地使用括号来自定义程序中的操作顺序。
答案 4 :(得分:0)
这是简单的运算符优先级:
4 + 20 / (3 - 1) * 2
首先计算所有括号的计算结果,在此之后全部*和/从左到右,在结束时+和 - 从左到右:
1. 4 + 20 / (3 - 1) * 2
2. 4 + (20 / 2) * 2
3. 4 + (10 * 2)
4. 4 + 20
= 24