【问题标题】:Why lower precedence operator executes first? [duplicate]为什么低优先级运算符首先执行? [复制]
【发布时间】:2012-08-28 02:45:31
【问题描述】:

可能重复:
Problem with operator precedence

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

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

【问题讨论】:

标签: c operator-precedence


【解决方案1】:

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

【讨论】:

  • ++的优先级怎么样。
  • 优先级会影响运算符的应用。它对它们的执行顺序没有影响。
  • @aakasha -- 你混淆了优先级和关联性。
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-22
    • 1970-01-01
    • 1970-01-01
    • 2020-03-22
    • 2015-05-23
    相关资源
    最近更新 更多