【问题标题】:examples of The precedence of && is higher than that of ||&& 的优先级高于 || 的例子
【发布时间】:2021-02-02 01:34:51
【问题描述】:

K&R c 说:&&的优先级高于||

但是为什么下面的代码,cd 仍然是-1:

int a, b = -1, c = -1, d = -1;
a = (b = 1) || (0, c = 0) && (1, d = 0);

【问题讨论】:

  • 因为|| 的右侧是short-circuited 并且从未计算过。
  • @dxiv,我使用 = 来查看评估的部分。

标签: c logical-operators operator-precedence


【解决方案1】:

因为&& 的优先级高于||,所以您的语句解析如下:

a = ((b = 1) || ((0, c = 0) && (1, d = 0)));

所以你有 (b = 1) 作为左操作数 ||(0, c = 0) && (1, d = 0) 作为右操作数。左边的操作数首先被评估,所以左边有 1。因此,整个|| 表达式的值是已知的,因此不会计算右侧,即(0, c = 0) && (1, d = 0)

所以cd 没有更新。

【讨论】:

  • 再一次回到老观点,优先级是关于分组,而不是评估顺序。
  • @dbush 因为逻辑表达式是从左到右求值的,所以我无法想象这种优先级有什么区别的表达式。
  • @0___________,对于 exp 1 || 0 && 0,如果&& 更高,则等于1 || ( 0 && 0),则 exp 的值为1,如果|| 更高,则等于到(1 || 0) && 0,exp的值为0,所以有区别。
猜你喜欢
  • 1970-01-01
  • 2013-02-13
  • 1970-01-01
  • 2011-11-01
  • 1970-01-01
  • 2014-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多