作业帮 > 综合 > 作业

int x =1,y = 2,z= 2; ++x && y-- || ++z; printf("%d,%d,%d",x,

来源:学生作业帮 编辑:百度作业网作业帮 分类:综合作业 时间:2024/06/29 01:27:23
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(
因为在一个表达是里面,牵涉到多个逻辑运算符,逻辑运算符的优先级都是不同的,&&的级别比||高,因此先计算&&.
&&、| |都是先计算左边表达式的值,当左边表达式的值能确定整个表达式的值时,就不再计算右边表达式的值.如 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
再问: int i = 10, j = 20, k; k = i - j ? i + j : i - 3 ? j : i; printf("%d, %d, %d", i, j, k);能帮看一下吗?刚才那个就是卡在了,如果y=2的话, a=y--; 结果a= 2 和y--, 结果就是 y= 1
再答: k = i - j ? i + j : i - 3 ? j : i; 这个是问号表达式,首先看k = i-j = -10,非零即真,所以表达式的值等价于冒号前面的,即i+j输出为i,j,k的值-10,10,20

如果y=2的话, a=y--; 表达式中y--,--是后置的,所以对这个表达式是先取y的值赋给a,在对y进行y--操作,所以结果a= 2 和y--, 结果就是 y= 1
如果a = --y,情况就不一样了,就是先算--y = 1,再把y赋给a,a = 1