设 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自加被短路没有运行。
总结:明确结合优先级不是计算优先级。