与或运算短路,及

设 x,y,z,t的值为int 型变量且初始值分别为2,2,0 ,则执行语句t=++x||++y&&++z后,x,y,z,t的值为多少?

此题在我刚开始学习c语言的时候就困惑我,我那个时候做的结果是x=3,y=3,z=1;但是正确答案是:

x=3,y=2,z=0。

我得到答案不是直接运算x,y,z分别自加;

我考虑了或运算的的短路作用,可是我还记得或运算的优先级比与运算的优先级低,所以,我认为应该先计算与运算的左值++y,然后如果++y表达式值为0,短路++z,否则运行++z,然后运行++x。所以结果是x=3,y=3,z=1。

现在看来,其实我进入了误区,与运算的优先级和或运算优先级不是运行(进行计算)的优先级,而是结合优先级。

对  t=++x||++y&&++z   用结合优先级分析加上括号,t = ++ x || ( ++ y && ++ z),

这样就能看清楚了,其实++x屏蔽的是()中的整个表达式。所以x自加,y,z自加被短路没有运行。

 

 

总结:明确结合优先级不是计算优先级。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值