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

麻烦解释一下为什么是2,1,2.,为什么不是2,2,2
2025-06-23 08:46:08
推荐回答(6个)
回答1:

因为在一个表达是里面,牵涉到多个逻辑运算符,逻辑运算符的优先级都是不同的,&&的级别比||高,因此先计算&&。
&&、| |都是先计算左边表达式的值,当左边表达式的值能确定整个表达式的值时,就不再计算右边表达式的值。如 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

回答2:

++x后x的值为2,然后y--,这里y使用后-1,则y变成了1,由于++x和y--都不等于0,所有++z被跳过,z值不变,所以输出是2,1,2
至于你说的int a =2,b;
b=a--;的问题,b=a--拆开可以看成b=a; a--;所以b=2,不是等于1

回答3:

++x,x的值先加1,再取x的值,++z也一样
y--,y=1;
所以输出2,1,2

回答4:

先解释一个东西:
x=1后x++的值是1,x++执行完后x是2。注意区分表达式的值和变量的值(虽然这题不用考虑也能做出来)。
x=1后++x的值是2,++x执行完后x是2。

开始答题:
先算++x是2,为真。执行完后x是2。
再算y--是2,为真,执行完后y是1。
然后算++x && y--,为真,所以或的值已经可以确定,不计算++z,z的值不变。

回答5:

++x 表示 先+1再使用;y--表示 先使用 再 -1 ;所以如果执行printf 结果就是 2 2 3

回答6:

我试了为什么是2,2,2。