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

为何以下C语言程序的输出结果为3?

这段C代码输出3的原因解析

先看你给出的代码片段:

#include <stdio.h>

int main()
{
    printf("%d", 1 ^ 0 + 3 ^ 0 == 0);

    return 0;
}

你出错的核心原因是没掌握C语言运算符的优先级与结合性,你的计算顺序完全不符合C的规则。

先明确关键运算符的优先级(从高到低):

  • 加法 + > 相等比较 == > 按位异或 ^
  • 同优先级的运算符按左结合顺序计算

现在一步步拆解表达式 1 ^ 0 + 3 ^ 0 == 0 的计算过程:

  1. 先算最高优先级的加法:0 + 3 = 3,表达式简化为 1 ^ 3 ^ (0 == 0)
  2. 再算次优先级的相等比较:0 == 0 结果为1(C语言中布尔真值用1表示),表达式简化为 1 ^ 3 ^ 1
  3. 最后按左结合计算按位异或:
    • 第一步:1 ^ 3,二进制是 01 ^ 11 = 10,对应十进制2
    • 第二步:2 ^ 1,二进制是 10 ^ 01 = 11,对应十进制3

所以整个表达式的结果是3,printf 自然输出3。

如果想按照你的思路计算,需要给异或和加法加上括号明确优先级:

printf("%d", ( (1 ^ 0) + (3 ^ 0) ) == 0);

这时候结果才是0,因为 (1+3)==0 为假,对应0。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 12:17:28