fledgling 发表于 2021-2-23 11:11:47

关于赋值表达式的优先级

a+=a-=a*a不等价于a=a+(a-(a*a))吗?
原式→a+=a-=a2→a+=a-a2→a=a+a-a2=2a-a2
我的运算哪里错了?

叙白 发表于 2021-2-23 11:18:56

第二行是答案吗

fledgling 发表于 2021-2-23 13:54:20

叙白 发表于 2021-2-23 11:18
第二行是答案吗

第二行是我自己推的结果,但是是错的,我不知道错在哪里。

叙白 发表于 2021-2-23 14:14:33

可以这样拆a = a + (a = a - a * a);
先看括号里的,a - a * a是-90,赋值给a,因为赋值表达式返回赋的值,所以最后就是a = a + -90,又因为a = -90,所以a = -90 + (-90),结果为-180

siaj 发表于 2021-2-23 18:14:15

因为赋值运算符的结合性是自右向左的,所有把a += a- = a*a看成两个表达式:
a -= a*a;
a += a;
然后相当于:
a = a - a*a;
a = a + a;
假设a初始化为2:
a = a - a*a = 2 - 2*2 = -2;
a = a + a = (-2) + (-2) = -4;
页: [1]
查看完整版本: 关于赋值表达式的优先级