int x =1,y = 2,z= 2; ++x && y-- || ++z; printf("%d,%d,%d",x,y,z);麻烦解释一下为什么是2,1,2.,为什么不是2,2,2

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/27 21:39:42

int x =1,y = 2,z= 2; ++x && y-- || ++z; printf("%d,%d,%d",x,y,z);麻烦解释一下为什么是2,1,2.,为什么不是2,2,2
int x =1,y = 2,z= 2; ++x && y-- || ++z; printf("%d,%d,%d",x,y,z);
麻烦解释一下为什么是2,1,2.,为什么不是2,2,2

int x =1,y = 2,z= 2; ++x && y-- || ++z; printf("%d,%d,%d",x,y,z);麻烦解释一下为什么是2,1,2.,为什么不是2,2,2
因为在一个表达是里面,牵涉到多个逻辑运算符,逻辑运算符的优先级都是不同的,&&的级别比||高,因此先计算&&.
&&、| |都是先计算左边表达式的值,当左边表达式的值能确定整个表达式的值时,就不再计算右边表达式的值.如 a = 0 && b++,&&运算符的左边位0,整个&&表达式就能确定为假,则右边表达式b++就不再判断;再如a=1 || b++,因为a=1就能使整个||表达式的值为真所以b++就不执行.
上面的也是同理,++x = 2,逻辑与表达式不能确定是否为真,所以在计算右边的y-- = 1,此时即++x && y-- = 2 && 1 = 1,也就是
++x && y-- || ++z = 1 || ++z,表达式右边就不用计算了,所以z = 2
结果输出2,1,2