C语言逻辑运算符的用法(非常详细,附带实例)
C语言提供了三种逻辑运算符:&&
(与)、||
(或)和 !
(非),它们各自的运算规则是:
-
&&
(逻辑与):当两个条件都为真时,结果为真; -
||
(逻辑或):只要有一个条件为真,结果为真; -
!
(逻辑非):将条件的真假取反。
逻辑运算符会对一个或多个条件表达式进行逻辑运算,返回的结果是 0 或非 0。
在C语言中,没有显式的
true
或false
类型,而是用整数表示:非 0 表示真,0 表示假。
逻辑运算符常用于构造复杂的条件表达式,特别是在需要多重判断的场景中。
本节将详细讲解这些逻辑运算符的定义、工作原理、优先级、使用场景以及注意事项,认真读完本节,你将全面掌握它们在C语言中的用法。
逻辑与(&&)运算符
&&
表示“与”,只有当左右两边的条件都为真(非 0)时,结果才为真(1);否则,结果为假(0)。
A | B | A && B |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
【实例】检查范围。
#include <stdio.h> int main(void) { int temp = 25; if (temp > 0 && temp < 100) { printf("温度在液体范围:%d\n", temp); } else { printf("温度超出液体范围\n"); } return 0; }
输出结果:
温度在液体范围:25
temp > 0
和 temp < 100
都为真,结果为 1,进入 if
分支。
逻辑或(||)运算符
||
表示“或”,只要左右两边有一个条件为真(非 0),结果就为真(1);只有两者都为假(0)时,结果才为假(0)。
A | B | A || B |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
【实例】检查极端值。
#include <stdio.h> int main(void) { int temp = -5; if (temp <= 0 || temp >= 100) { printf("温度异常:%d\n", temp); } else { printf("温度正常\n"); } return 0; }
输出结果:
温度异常:-5
temp <= 0
为真,||
结果为 1,无需检查右侧条件。
逻辑非(!)运算符
!
表示“非”,将条件的真假取反:真(非 0)变为假(0),假(0)变为真(1)。它是单目运算符,只作用于一个表达式。
A | !A |
---|---|
0 | 1 |
1 | 0 |
【实例】检查非零。
#include <stdio.h> int main(void) { int x = 0; if (!x) { printf("x 是 0\n"); } else { printf("x 不是 0\n"); } return 0; }
输出结果:
x 是 0
x
为 0,!x
为 1,条件为真。
短路求值
C语言的逻辑运算符具有“短路求值”(short-circuit evaluation)的特性,即在某些情况下不会计算整个表达式:
-
&&
:左侧为假(0),右侧不计算,结果直接为 0。 -
||
:左侧为真(非 0),右侧不计算,结果直接为 1。
【实例】短路求值。
#include <stdio.h> int main(void) { int x = 0, y = 5; if (x && y++) { printf("条件为真\n"); } printf("y = %d\n", y); return 0; }
输出结果:
y = 5
x
为 0,&&
左侧为假,y++
未执行,y
保持 5。
逻辑运算符的优先级与结合性
逻辑运算符的优先级从高到低依次为:!
> &&
> ||
,且 &&
和 ||
是左结合的。括号可以改变优先级。
【实例】优先级。
#include <stdio.h> int main(void) { int a = 1, b = 0, c = 1; if (a || b && c) { printf("条件为真\n"); } else { printf("条件为假\n"); } return 0; }
输出结果:
条件为真
b && c
先计算,结果为 0,再与 a
做 ||
,结果为 1。若需改变顺序,需加括号,如 (a || b) && c
。
逻辑运算符常见使用场景
1) 多条件判断
结合 if
语句检查多个条件。
#include <stdio.h> int main(void) { int age = 20, height = 170; if (age >= 18 && height >= 165) { printf("符合参赛条件\n"); } else { printf("不符合条件\n"); } return 0; }
输出结果:
符合参赛条件
2) 默认值检查
用 ||
设置默认值。
int value = user_input || 10; // 若 user_input 为 0,则用 10
3) 条件取反
用 !
简化逻辑。
if (!is_empty) // 等价于 if (is_empty == 0)
逻辑运算符使用注意事项
1) 避免副作用混淆
在逻辑表达式中使用自增或赋值可能因短路求值导致意外结果。
#include <stdio.h> int main(void) { int x = 1, y = 0; if (x || y++) { printf("y = %d\n", y); } return 0; }
输出结果:
y = 0
x
为真,y++
未执行。
2) 类型安全
逻辑运算符返回值是 int
,但操作数可以是任何标量类型(如 float
),只需非 0 即真。
3) 可读性
复杂表达式建议用括号提高可读性,避免优先级误解。
if ((a > 0) && (b < 10 || c != 0)) // 更清晰
总结
C语言的逻辑运算符有 3 种,分别是逻辑与&&
、逻辑或||
和逻辑非 !
,它们是 C语言程序中构建复杂条件的基础工具。
读完本文,相信你已经掌握了 3 种逻辑运算符的用法以及注意事项。