练习C语言决策控制时,对逻辑运算符计算结果存在困惑
C语言逻辑运算符计算结果解析
先看你给出的代码:
#include <stdio.h> int main() { int i=4, j=-1, k=0, w, x, y, z; w = i||j||k; x = i&&j&&k; y = i||j&&k; z = i&&j||k; printf("w = %d, x = %d, y = %d, z = %d", w,x,y,z); return 0; }
运行输出:
w = 1, x = 0, y = 1, z = 1
下面逐个拆解每个变量的计算逻辑,核心要记住C语言的两个关键规则:
- 非0整数都被视为逻辑真(值为1),0视为逻辑假(值为0)
- 逻辑运算符支持短路求值:运算过程中一旦能确定最终结果,后续表达式就不会执行;同时
&&的优先级高于||
1. w = i||j||k
||是逻辑或,只要任意一个操作数为真,结果就为真:
- i的值是4(非0,真),所以无需计算后面的j和k,直接返回逻辑真,即
w=1
2. x = i&&j&&k
&&是逻辑与,必须所有操作数都为真,结果才为真:
- i和j都是非0(真),但k是0(假),所以整个表达式结果为逻辑假,即
x=0
3. y = i||j&&k
因为&&优先级更高,先计算j&&k:
- j是-1(真),k是0(假),所以
j&&k结果为0(假) - 再计算
i||0,i是4(真),所以最终结果为1,即y=1
4. z = i&&j||k
同样先算优先级更高的i&&j:
- i和j都是非0(真),所以
i&&j结果为1(真) - 再计算
1||k,逻辑或只要有一个真就为真,所以不管k的值是多少,结果都是1,即z=1
内容的提问来源于stack exchange,提问作者DurYodhan Snipes
相关产品推荐
相关产品推荐

