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 种逻辑运算符的用法以及注意事项。
ICP备案:
公安联网备案: