我不明白如何{int a=10; a+=++a-5/3+6*a; System.out.print(a);} 输出 86

问题描述 投票:0回答:1

我知道速记符号的优先级比这里使用的任何运算符都低,所以我的思考过程是将其视为 a = a + ++a-5/3+6a 所以如果我应用优先级 ++a 会增加值a 到 11,然后 5/3=1 和 611=66 那么为什么它不将该表达式的结果 (76) 添加到 11(a 的增量值)呢?

现在我的理解是,表达式 ++a-5/3+6*a 的净值 76 被添加到 a 的旧值 10 上。我不明白为什么,因为当我们评估表达式时,我们做了增加 a 值,但现在我如何使用旧值......

java operators operator-precedence
1个回答
0
投票

表达式 int a=10; a+=++a-5/3+6*a; System.out.print(a);是算术运算和赋值的组合。 让我们一步步分解来理解为什么它会输出 86:

int a=10;:这将变量 a 初始化为值 10。

++a:这是一个预增操作,所以它把a的值加1,a变成11。

5/3:这是整数除法,结果为 1(因为它删除了小数部分)。

6*a:将 a 的当前值(即 11)乘以 6,得到 66。

现在,将以上操作放在一起:

++a 的结果是 11。 5/3 结果为 1。 6a 结果为 66。 因此,表达式 ++a-5/3+6a 的计算结果为 11 - 1 + 66,等于 76。

现在,让我们回到原来的作业:

a 当前的值为 10。 a += 76 相当于 a = a + 76,它将 a 的值更新为 86。 最后,System.out.print(a)打印a的值,即86。

© www.soinside.com 2019 - 2024. All rights reserved.