我在Java中执行顺序操作是否有误?

3

我对这个问题有些困惑。

我不确定 % (mod) 在BEDMAS操作顺序中属于哪一部分。

37 % 20 % 3 * 4 = ?

我的心算答案是5,但我一定做错了什么。% mod 在BEDMAS中属于哪个部分?


1
为什么不直接运行代码,看看操作顺序是什么? - Amongalen
你说的“My answer is 5”是什么意思?这是你手动计算的答案,还是Java代码的输出结果(如果是后者,它应该是8,那么我们想看到一个[mre])? - Mark Rotteveel
@Amongalen我对输出结果不是很感兴趣,更关心操作顺序。 - Jeremy Shanks
@MarkRotteveel 我的心算答案是(错误地)5。我应该澄清一下。 - Jeremy Shanks
@Tarapuka 考虑到这个方程式的简单性,你可以很容易地推断出问题的答案。你能想到多少种可能的结果?2 种?3 种? - Amongalen
3个回答

8
取模(%)运算符的优先级与除法(/)运算符相同,因此:
37 % 20 等于 17
17 % 3 等于 2
2 * 4 等于 8 IDEOne 输出结果

4
参考文献:Java 语言规范第15.7章节 :运算符 */% 被称为乘法运算符... 它们具有相同的优先级并且在语法上是左结合的(它们从左到右分组)。 - NPras

4

BEDMAS是误导性的,因为它暗示了除法比乘法先执行。这更适用于小学。

应该是

  1. 乘法操作:* / %
  2. 加法(二元)操作:+ -

括号、一元运算符(-)、位运算和逻辑运算也未完全包含在BEDMAS中。

    (((37 % 20) % 3) * 4) = 8

求模后不是乘法:

    ((37 % 20) % (3 * 4)) = 5  ***

1
我刚测试了一下,Java输出的结果完全正确。37 % 20 = 17, 17 % 3 = 2, 2 * 4 = 8。但是关于BEDMAS问题,请参考MathExchange

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接