为什么降低优先级运算符首先执行?

kar*_*hik 0 c operator-precedence

可能重复:
运算符优先级问题

我们知道前缀的优先级大于"LOGICAL AND"(&&),"LOGICAL AND"的优先级大于"LOGICAL OR"(||).

以下程序似乎违反了它:

int main()

{
    int i=-3,j=2,k=0,m;
    m=++i||++j&&++k;
    printf("%d %d %d %d",i,j,k,m);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果优先级++大于&&,||则应首先执行所有前缀.在此之后i=-2,j=3,k=1,然后&&将首先执行.为什么输出显示:-2 2 0 1

该程序的行为在ubuntu v12.04上也是相同的.

Hot*_*cks 5

&&||运营商"短路".也就是说,如果左边的值为FALSE &&或者为TRUE,||那么右边的表达式不会被执行(因为不需要确定整个表达式的值).