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

时间:2012-08-28 02:45:32

标签: c operator-precedence

  

可能重复:
  Problem with operator precedence

我们知道precedence的前缀大于“LOGICAL AND”(&&),“LOGICAL AND”的优先级大于“LOGICAL OR”(||)。< / p>

Below program似乎违反了它:

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;
}

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

程序的行为在ubuntu v12.04上也是一样的。

2 个答案:

答案 0 :(得分:5)

&&||运营商正在“短路”。也就是说,如果&&左边的值为FALSE,||左边的值为TRUE,则右边的表达式不会被执行(因为不需要确定整个表达式的值)。 / p>

答案 1 :(得分:2)

这是正确的,因为短路定义。

m = ++i||++j&&++k

首先,左边的部分++ i总是为TRUE所以现在我是-2并且它不执行表达式的正确部分,j,k的值不会改变。