0

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

我们知道前缀的优先级大于“逻辑与”(&&),“逻辑与”的优先级大于“逻辑或”(||)。

下面的程序似乎违反了它:

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 上也是相同的。

4

2 回答 2

5

和运算&&||是“短路”的。也就是说,如果左边的值为 FALSE&&或 TRUE,||则不执行右边的表达式(因为不需要确定整个表达式的值)。

于 2012-08-28T02:49:00.440 回答
2

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

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

首先,左侧部分 ++i 始终为 TRUE,所以现在 i 为 -2 并且它不执行表达式的右侧部分,j,k 的值不会改变。

于 2012-08-28T04:03:49.860 回答