You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何这段C代码中z未被赋值为50?优先级与短路求值疑问

问题解析:为何z未被赋值为50?

先看你给出的C代码:

int x = 10, y = 20, z = 10;
if (x == 10 || y == 20 && (z = 50))
    printf("%d", z);

核心原因是逻辑或||的短路求值特性,优先级只是决定表达式的结合顺序,不会覆盖这个规则:

  • 首先计算x == 10,结果为真(非0)。
  • 逻辑或||的规则是:只要左侧表达式为真,整个表达式的结果就已经确定为真,右侧的表达式会被直接跳过,完全不会执行。
  • 虽然&&优先级高于||,表达式会被解析成x == 10 || (y == 20 && (z = 50)),但由于左侧的x ==10已经为真,右侧的y ==20 && (z=50)根本没机会运行,z=50这个赋值操作自然不会发生,所以z还是初始的10。

如果想让z=50执行,可以把左侧的条件改成假,或者用不具备短路特性的按位或|(注意:按位或语义和逻辑或不同,仅适用于布尔值场景)。

内容的提问来源于stack exchange,提问作者Hossam rashed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 04:59:54