为何以下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 的计算过程:
- 先算最高优先级的加法:
0 + 3 = 3,表达式简化为1 ^ 3 ^ (0 == 0) - 再算次优先级的相等比较:
0 == 0结果为1(C语言中布尔真值用1表示),表达式简化为1 ^ 3 ^ 1 - 最后按左结合计算按位异或:
- 第一步:
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
相关产品推荐
相关产品推荐

