这个表达式包含很多个赋值运算符,它们的结合性都是自右至左。下面分析这个题目:
a += a *= a -= a / b,a / b 最先求值,然后把a的值减去a/b。a -= a / b是赋值运算,只要赋值成功,就返回1,所以原表达式变成a += a *= 1,注意此时a的值已经被赋值运算改变。下一步执行a *= 1,它等价于 a = a * 1,而一个数乘1后它的值不变,所以经过这个赋值运算,a的值不变,同时赋值成功,原表达式变为a += 1,系统执行对变量a加1的操作,表达式执行结束。
可以分几步来分析
为了更好理解,不妨定义一下a b的值,就a=10 ,b=2吧
第一步
a-=a/b a=a-a/b=10-10/2=10-5=5 这里把5赋给a
第二步
a*=5 a=a*5=5*5=25 因为在第一步把5赋给a了,这时把25赋给a
第三步
a+=25 a=a+25=25+25=50 同理。第二步的时候a得到新的赋值
从右向左,依次计算
a+=a*=a-=a/b
第1步:计算a-=a/b,即a=a-a/b,生成新的a
第2步:计算a*=(新的a),即a=a*a,生成新的a
第3步:计算a+=(新的a),即a=a+a,生成新的a
+=, -=, *= /= 是同等优先级的运算符,它们的结合顺序是 自右向左的。
从右到左计算。先计算a/b,依次类推最后a = a+a*(a-a/b)