C中的运算符优先级

use*_*918 3 c operator-precedence operator-keyword

可能重复:
为什么"++ x || ++ y && ++ z"首先计算"++ x"?但是,运算符"&&"高于"||"

以下程序似乎没有按预期工作.'&&'具有比'||'更高的优先级,因此实际输出令人困惑.有谁能解释o/p吗?

#include <stdio.h>

int main(int argc, char *argv[])
{
    int x;
    int y;
    int z;

    x = y = z = 1;

    x++ || ++y && z++;

    printf("%d %d %d\n", x, y, z);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

实际输出为:2 1 1

TIA.

R..*_*R.. 5

优先顺序和评价顺序无关.

&&具有更高的优先级而不仅仅||意味着表达式被解释为

x++ || (++y && z++);
Run Code Online (Sandbox Code Playgroud)

因此,首先计算左侧操作数||(因为它后面有一个序列点,因此需要),并且因为它计算非零值,所以(++y && z++)从不评估右侧操作数.