【发布时间】:2021-12-16 05:32:55
【问题描述】:
在 C 程序中:
1 || 0 && 0 导致 1。我认为这种行为是 OR 运算符短路了右侧的其余部分 (0 && 0),因为左侧有 1。
但
0 && 0 || 1 也会导致 1。我很困惑为什么 AND 运算符左侧的0 没有短路0 || 1 而答案不是0。
请指导我!
【问题讨论】:
-
&&的优先级高于||,因此这两个表达式在逻辑上是等价的。 -
小心你的术语。通常,
short circuit表示避免计算,因此1 || (c=getchar()) != EOF不会计算 getchar() 表达式,并且不会消耗任何字符;而0 || (c=getchar()) != EOF总是会调用getchar()。避免评估的前者通常称为short circuiting。您引用的一些基于优先级的表达式不是。 -
Mujahid Ali,“但 0 && 0 || 1 也导致 1”与“但 (0 && 0) || 1 也导致 1”相同,所以第一个
0做到了短路到(0 && anything) || 1,然后是0 || 1。
标签: c logical-operators