为什么将4 + 20 /(3 - 1)* 2解释为4 +(20)/((3 - 1)* 2)是错误的?

时间:2015-02-07 02:25:46

标签: java operator-precedence

在学习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中,什么是使一种解释正确而另一种解释错误的关键因素。

谢谢!

5 个答案:

答案 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