这个表达的结果是什么?

chi*_*may -1 c

我使用的书给出了从右到左的逻辑运算符的关联性,所以我希望这个代码的结果是,2 2 1但它是2 1 1.

int x,y,z;
x=y=z=1;
z=++x||++y||++z;
printf("%d %d %d",x,y,z);
Run Code Online (Sandbox Code Playgroud)

为什么是这样?

oua*_*uah 6

||有短路评估要求.如果第一个操作数不同于0,则不计算第二个操作数.

(C11,6.5.14逻辑OR运算符)p4"如果第一个操作数与0不等,则不计算第二个操作数."

在您的情况下++y,++z永远不会评估.