我们有一个表达优先级和结合在逻辑运算符用C
int x,y,z;
x=y=z=2;
y=++x || --y;
printf("%d %d",x,y);
它给x=3
和y=2
作为输出,但我认为我们在这里有4个运营商:++
,--
,||
和=
。
我们知道++
和--
具有最高的优先级,所以他们必须先评估,然后||
,然后=
。
另外我们知道++
和--
具有相同的优先级,所以我们使用关联性,在这种情况下,它是正确的左边。所以我认为首先--y
将被评估,其中y=1
,然后++x
这应该给x=3
,然后||
应评估。
为什么我从我的机器得到不同的答案?谢谢。
优先顺序与评估顺序无关。无论如何,它是未定义的行为,如果'--y'被评估。在这种情况下,你实际寻找的是短路评估,因为实际上'--y'在这里没有被评估。 – chris 2014-08-28 18:27:16
请停止使用复杂,无方括号的表达式和可疑行为编写垃圾代码。它会让你被解雇。 – 2014-08-28 20:58:15