【问题标题】:priority of operators in C languageC语言中运算符的优先级
【发布时间】:2020-11-16 19:52:13
【问题描述】:

嗨,我正在学习 C 语言,我了解到 () 在 C 中比 && 具有更高的优先级, 但是当我执行以下程序时,a gard 它的价值虽然它已经放在() 之间,我能得到任何解释吗?

#include<stdio.h>
int main()
{
    int a,b;
    a=2,b=4;
    printf("%d\n",0&&(a=b));
    printf("%d",a);
    return 0;
}

【问题讨论】:

  • &amp;&amp;短路
  • a 没有被分配b 的值,因为整个表达式只能是false,来自0 &amp;&amp; ... ,第二部分(a=b) 没有被评估。
  • @black OP 很惊讶分配没有发生。这种改变会消除问题,而不是回答它。
  • @LEARNER 也适用于||?:。短路是大多数以运算符命名的语言的通用约定。
  • @black 否 我想测试&amp;&amp;() 之间的优先级,如果a 的值发生变化,则意味着() 在C 中具有优先级,但第二个表达式@ 987654338@ 甚至没有被执行!

标签: c operator-precedence


【解决方案1】:

这是因为当逻辑&amp;&amp;中最左边的语句为假时,最右边的语句将不会被计算\执行。

【讨论】:

    【解决方案2】:

    &amp;&amp;|| 运算符都是短路 - 也就是说,如果表达式的值可以从左操作数确定,那么右操作数将不会在全部。

    给定表达式a &amp;&amp; b,如果a 的计算结果为0(假),那么整个表达式的值将为假无论b 的值如何,所以@987654326 @ 不被评估。

    给定表达式a || b,如果a 的计算结果为非零(真),那么整个表达式的值为真(1)无论b 的值如何,因此不会评估 b

    在您的示例0 &amp;&amp; (a=b) 中,左操作数是0,因此无论(a=b) 发生什么,表达式都将计算为0 (false),因此不会计算(a=b)

    【讨论】:

      猜你喜欢
      • 2013-06-26
      • 2013-02-24
      • 2017-06-02
      • 1970-01-01
      • 2013-02-09
      • 1970-01-01
      相关资源
      最近更新 更多