鱼C论坛

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

[已解决]求解这个程序中,x,y,z的值怎么得出来的?

[复制链接]
发表于 2017-10-23 03:15:42 | 显示全部楼层 |阅读模式

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

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

x
求过程想很久了谢谢!
最佳答案
2017-10-23 09:13:17
最关键的在z这里,这里有个陷阱,首先要搞清楚优先级的关系。
虽然“,”逗号运算符是取最后的那个式子的答案,但是“=”赋值运算符的优先级大,所以直接就取了x++的值作为z的值,导致后面的y运算没有被取到。
关键的说了来说说别的吧,x++这种后置的自增运算会先输出x自身的值后才会自增,就是说先给出x=1,然后再自增到x=2。++y是先自增再输出,直接就是y=2的输出。这个等式里,x先会给z,z=1,然后x会自增,变成x=2,y自增了2次,y=3。
当然还有一种玩法,就是把z后面的所有加括号,z = (x++,y++,++y); 答案就是2,3,3。因为括号里都运算好x=2,y=3,前面说了,优先级的问题,逗号运算符因为有()的原因,所以比赋值到,那么z就会取到最后的++y的值,z=y=3。
如果不明白可以点“回复”,明白了麻烦点下“最佳答案”。对了,小提示,少用这样的式子,不仅自己看着麻烦易错,要是和别人一起开发,别人会疯
QQ拼音截图未命名.jpg
屏幕快照 2017-10-22 21.08.00.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-10-23 09:02:42 | 显示全部楼层
逗号的优先级是最低的,所以
z= x++,y++,++y;
等价于以下语句:
z = x;
x++;
y++;
++y;
所以输出结果应该是
x=2,y=3,z=1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2017-10-23 09:13:17 | 显示全部楼层    本楼为最佳答案   
最关键的在z这里,这里有个陷阱,首先要搞清楚优先级的关系。
虽然“,”逗号运算符是取最后的那个式子的答案,但是“=”赋值运算符的优先级大,所以直接就取了x++的值作为z的值,导致后面的y运算没有被取到。
关键的说了来说说别的吧,x++这种后置的自增运算会先输出x自身的值后才会自增,就是说先给出x=1,然后再自增到x=2。++y是先自增再输出,直接就是y=2的输出。这个等式里,x先会给z,z=1,然后x会自增,变成x=2,y自增了2次,y=3。
当然还有一种玩法,就是把z后面的所有加括号,z = (x++,y++,++y); 答案就是2,3,3。因为括号里都运算好x=2,y=3,前面说了,优先级的问题,逗号运算符因为有()的原因,所以比赋值到,那么z就会取到最后的++y的值,z=y=3。
如果不明白可以点“回复”,明白了麻烦点下“最佳答案”。对了,小提示,少用这样的式子,不仅自己看着麻烦易错,要是和别人一起开发,别人会疯
QQ拼音截图未命名.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-10-24 01:38:02 | 显示全部楼层
BngThea 发表于 2017-10-23 09:02
逗号的优先级是最低的,所以
z= x++,y++,++y;
等价于以下语句:

简洁明了,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-10-24 01:40:15 | 显示全部楼层
丶忘却的年少o 发表于 2017-10-23 09:13
最关键的在z这里,这里有个陷阱,首先要搞清楚优先级的关系。
虽然“,”逗号运算符是取最后的那个式子的 ...

谢谢,懂了!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 19:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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