You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

疑问:int a=1时a -= a+a为何结果为-1而非1?

问题解答

首先看两段代码的本质差异:

第一段代码 a -= a + a 的执行逻辑

复合赋值运算符 -= 的运算规则是:a -= expr 等价于 a = a - (expr),这里的expr是整个右侧的表达式,会先完整计算右侧表达式的值,再和左边的原始a做减法。

执行步骤:

  1. 初始a = 1
  2. 先计算右侧的a + a:1 + 1 = 2
  3. 再执行a = a - 2:1 - 2 = -1
    最终结果就是-1。

第二段代码 a = a - a + a 的执行逻辑

这是普通的加减运算,遵循从左到右的运算顺序(加减优先级相同):

执行步骤:

  1. 初始a = 1
  2. 先算a - a:1 - 1 = 0
  3. 再算0 + a:0 + 1 = 1
    最终结果为1。

为什么二者不等价?

你误以为a -= a + a等价于a = a - a + a,但实际上复合赋值运算符会把右侧整个表达式作为一个整体,相当于给右侧加了隐形括号。如果要让第一段代码和第二段等价,需要写成a -= (a - a),但这显然不是你原本的写法。

内容的提问来源于stack exchange,提问作者WinsenTjhang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 17:30:46