【问题标题】:How does this calculation a -= a + a works? (int a = 1) The result of the execution is -1, not 1这个计算 a -= a + a 是如何工作的? (int a = 1) 执行的结果是-1,不是1
【发布时间】:2022-12-17 19:20:07
【问题描述】:
int a = 1;

a -= a + a;

上面的代码结果是 -1,我希望它是 1。

但是下面的代码实际上让我明白了 1

a = a - a + a

他们不应该是一样的吗?第一个代码如何达到-1?

我试图查看加法和减法的数学运算顺序,我认为我会对它们的工作原理产生误解。但看起来我通过对计算进行从左到右的操作是正确的。

【问题讨论】:

  • 先计算a + a,结果为2。再计算a -= 2,结果为-1。实际计算出来的不是a - a + a而是a - (a + a),和a - a - a是一样的。

标签: java


【解决方案1】:

-= 的优先级低于+,所以操作顺序是:

a -= (a + a);
a -= (1 + 1);
a -= 2;

另一方面,-+具有相同的优先级,并且是左结合的,所以这里的操作顺序是:

a = ((a - a) + a);
a = ((1 - 1) + 1);
a = (   0    + 1);
a = 1;

【讨论】:

    【解决方案2】:

    操作顺序 - 在第一个中,计算 a + a 然后从 a 中减去。在第二个中,从 a 中减去 a,然后是加法(从左到右)。

    【讨论】:

      【解决方案3】:

      Java 语言规范writes

      E1 op= E2 形式的复合赋值表达式等效于 E1 = (T) ((E1) op (E2)),其中 TE1 的类型,除了 E1 仅计算一次。

      也就是说,表达式

      a -= a + a
      

      相当于

      a = (int) ((a) - (a + a))
      

      评估像

      a = (1) - (1 + 1)
      

      【讨论】:

        猜你喜欢
        • 2017-01-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-07
        • 2012-05-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多