为什么将 4 + 20 / (3 - 1) * 2 解释为 4 + (20) / ((3 - 1) * 2) 是错误的?
Why is it wrong to interpret 4 + 20 / (3 - 1) * 2 as 4 + (20) / ((3 - 1) * 2)?
在研究 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 使一种解释正确而另一种解释错误的关键因素是什么。
谢谢!
运算顺序表明最里面的括号先计算,然后从左到右进行乘法和除法,然后从左到右进行加法和减法。从左到右的原则在这里很重要。这种运算顺序是数学标准,Java(以及大多数语言)遵循数学标准。 Order of Operations
嗯,你先评估括号。
所以它 4+20/2*2
然后除法
所以它 4+10*2
然后乘法
所以它 4+20
意思是最后的答案是24。
此答案独立于编程语言,并基于操作顺序或 "PEMDAS"
Java 有一个叫做 'precedence of operators' 的东西请看这里的一些例子 precedence of operators
但是,您可以通过适当地使用括号来自定义程序中的操作顺序。
按照你描述的方式解读没有错。一旦你开始包含括号,你就有效地绕过了算术运算的通常顺序。没有括号,计算算术运算的通常顺序就会开始。这样数学家就可以以一致的方式进行数学运算,并以一致的方式进行计算。
这是简单的运算符优先级:
4 + 20 / (3 - 1) * 2
首先计算所有括号,然后所有 * 和 / 从左到右,最后 + 和 - 从左到右:
1. 4 + 20 / (3 - 1) * 2
2. 4 + (20 / 2) * 2
3. 4 + (10 * 2)
4. 4 + 20
= 24
在研究 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 使一种解释正确而另一种解释错误的关键因素是什么。
谢谢!
运算顺序表明最里面的括号先计算,然后从左到右进行乘法和除法,然后从左到右进行加法和减法。从左到右的原则在这里很重要。这种运算顺序是数学标准,Java(以及大多数语言)遵循数学标准。 Order of Operations
嗯,你先评估括号。
所以它 4+20/2*2
然后除法
所以它 4+10*2
然后乘法
所以它 4+20
意思是最后的答案是24。
此答案独立于编程语言,并基于操作顺序或 "PEMDAS"
Java 有一个叫做 'precedence of operators' 的东西请看这里的一些例子 precedence of operators
但是,您可以通过适当地使用括号来自定义程序中的操作顺序。
按照你描述的方式解读没有错。一旦你开始包含括号,你就有效地绕过了算术运算的通常顺序。没有括号,计算算术运算的通常顺序就会开始。这样数学家就可以以一致的方式进行数学运算,并以一致的方式进行计算。
这是简单的运算符优先级:
4 + 20 / (3 - 1) * 2
首先计算所有括号,然后所有 * 和 / 从左到右,最后 + 和 - 从左到右:
1. 4 + 20 / (3 - 1) * 2
2. 4 + (20 / 2) * 2
3. 4 + (10 * 2)
4. 4 + 20
= 24