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

C语言运算符优先级疑问:逻辑与为何未触发后置自增?

问题解答

先看你给出的代码:

int a = 1, b = 2, c = 3;

printf("%d ", c - 3 && b++ > c);

printf("%d %d %d", a, b, c);

你疑惑的核心是为什么b没有自增,这和运算符优先级无关,根源是逻辑与&&的短路求值规则:

  • 逻辑与&&的求值逻辑是:先计算左操作数,若左操作数结果为0(假),整个表达式的结果必然是0,此时右操作数会被直接跳过,完全不会执行。
  • 你的表达式中,左操作数c-3计算结果为3-3=0,属于假,因此右边的b++ > c根本没机会运行,b的自增操作自然不会发生,最终输出里b还是初始值2。

再明确两个容易混淆的概念:

  • 运算符优先级:仅决定表达式的语法分组,比如你的表达式会被分组为(c-3) && ((b++) > c),这部分你的理解是对的,但优先级不决定操作数的求值顺序。
  • 求值顺序:逻辑运算符&&、||和条件运算符?:是C语言里少数规定了严格求值顺序的运算符——左操作数先求值,右操作数的求值与否完全取决于左操作数的结果。

所以不是逻辑运算符绕过了优先级,而是优先级管的是表达式的结构,短路求值管的是哪些部分会被实际执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 03:42:03