关于简单算术运算的问题

时间:2018-12-06 05:32:10

标签: java math

请查看以下代码:

    int a = 5, b = 7;
    System.out.println(++a + b-- - a-- * --b);

它输出-17。但是我不明白为什么。我认为输出应为-19。因为首先我们进行乘法5 * 6 = 30,然后乘5 + 6 = 11,最后乘11-30 = -19。 有人可以告诉我为什么输出为-17吗?

2 个答案:

答案 0 :(得分:4)

以下是使用Java中操作顺序的说明:

int a = 5, b = 7;

++a + b-- -  a-- * --b
  6 + 7   - (6 * 5)
  13 - 30
  -17

第一个项的值为6,因为++a的意思是先递增a然后求值。另一方面,b--的求值为7,因为后缀--出现在 b之后。对于乘法中涉及的两个术语,由于Java中操作规则的顺序,我们将其放在括号中。同样的逻辑也适用于此,我们得到30个产品。

答案 1 :(得分:0)

您将evaluation orderprecedence混淆了。

无论操作符的优先级如何,操作数++ab--a----b都是从左到右求值的。