鱼C论坛

 找回密码
 立即注册
查看: 1186|回复: 4

[已解决]关于赋值表达式的优先级

[复制链接]
发表于 2021-2-23 11:11:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
a+=a-=a*a不等价于a=a+(a-(a*a))吗?
原式→a+=a-=a2→a+=a-a2→a=a+a-a2=2a-a2
我的运算哪里错了?
最佳答案
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;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-2-23 11:18:56 | 显示全部楼层
第二行是答案吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-23 13:54:20 | 显示全部楼层
叙白 发表于 2021-2-23 11:18
第二行是答案吗

第二行是我自己推的结果,但是是错的,我不知道错在哪里。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-14 18:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表