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

为何下述C程序中num2的值为-1而非0?

为什么num2的输出值是-1而不是0?

你的代码如下:

#include <stdio.h>

int main(void)
{
    int num1 = 0, num2 = -1, num3 = -2, num4 = 1, ans;
    ans = num1++ && num2++ || ++num4 && num3++;
    printf("%d %d %d %d %d", num1, num2, num3, num4, ans);
    return 0;
}

运行输出:

1 -1 -1 2 1

问题核心在于C语言中&&和||的短路求值特性:当左边表达式的结果已经能确定整个逻辑表达式的最终结果时,右边的表达式会被直接跳过,完全不执行。我们拆解表达式一步步看:

因为&&的优先级高于||,所以原表达式等价于:
(num1++ && num2++) || (++num4 && num3++)

  1. 先执行左边的num1++ && num2++:

    • num1初始值是0,num1++是后置自增,先返回当前值0(逻辑假),之后num1才会变成1。
    • 对于&&运算符,只要左操作数是假,整个表达式结果必然为假,因此右边的num2++会被短路,根本不会执行。所以num2保持初始值-1不变。
  2. 左边子表达式结果为假(0),因此需要执行||右边的++num4 && num3++:

    • ++num4是前置自增,先把num4从1改成2,返回2(逻辑真)。
    • 对于&&运算符,左操作数为真时必须执行右边表达式,所以num3++被执行:num3初始是-2,num3++先返回-2(逻辑真),之后num3变成-1。
    • 这个子表达式结果为真(1),因此整个||表达式的结果为真(1),ans被赋值为1。

最终各变量的变化:

  • num1:执行了num1++,从0变为1
  • num2:num2++未执行,保持-1
  • num3:执行了num3++,从-2变为-1
  • num4:执行了++num4,从1变为2
  • ans:整个表达式结果为1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 00:25:17