- 逻辑与 (
&&) - 逻辑或 ()
- 逻辑非 ()
下面我们来详细解释每一种运算符。

逻辑与 (&&)
&& 运算符是一个二元运算符,需要两个操作数,它返回一个布尔值(在C语言中,用 1 表示 true,0 表示 false)。
规则: 只有当两个操作数都为真时,整个表达式的结果才为真,否则,结果为假。
可以把它理解为“。
| 操作数A | 操作数B | A && B 的结果 |
|---|---|---|
| 真 (1) | 真 (1) | 真 (1) |
| 真 (1) | 假 (0) | 假 (0) |
| 假 (0) | 真 (1) | 假 (0) |
| 假 (0) | 假 (0) | 假 (0) |
示例:

int age = 25;
int isStudent = 1; // 1代表真
// 检查年龄是否大于18岁 *** 是否是学生
if (age > 18 && isStudent) {
printf("你可以享受学生折扣,\n");
} else {
printf("你不符合学生折扣条件,\n");
}
// 输出: 你可以享受学生折扣。
短路求值:
&& 运算符具有“短路求值”的特性,如果第一个操作数为假,整个表达式必然为假,因此C语言不会再去计算第二个操作数,直接得出结果,这在提高效率和避免错误方面非常有用。
示例:
int x = 5;
int y = 10;
// 因为 x < 0 为假,所以整个表达式为假,y++ 不会被执行
if (x < 0 && y++) {
// ...
}
printf("x = %d, y = %d\n", x, y); // 输出: x = 5, y = 10
逻辑或 ()
运算符也是一个二元运算符,需要两个操作数。
规则: 只要两个操作数中至少有一个为真,整个表达式的结果就为真,只有当两个操作数都为假时,结果才为假。

可以把它理解为“或者”。
| 操作数A | 操作数B | A || B 的结果 | | :------ | :------ | :------------- | | 真 (1) | 真 (1) | 真 (1) | | 真 (1) | 假 (0) | 真 (1) | | 假 (0) | 真 (1) | 真 (1) | | 假 (0) | 假 (0) | 假 (0) |
示例:
char grade = 'B';
// 检查成绩是否为'A' **或者** 'B'
if (grade == 'A' || grade == 'B') {
printf("恭喜!你获得了优秀或良好的成绩,\n");
} else {
printf("继续努力!\n");
}
// 输出: 恭喜!你获得了优秀或良好的成绩。
短路求值: 运算符也具有“短路求值”的特性,如果第一个操作数为真,整个表达式必然为真,因此C语言不会再去计算第二个操作数。
示例:
int a = 2;
int b = 5;
// 因为 a > 0 为真,所以整个表达式为真,b++ 不会被执行
if (a > 0 || b++) {
// ...
}
printf("a = %d, b = %d\n", a, b); // 输出: a = 2, b = 5
逻辑非 ()
运算符是一个一元运算符,只需要一个操作数,它用于“反转”操作数的逻辑状态。
规则:
- 如果操作数为真 (
1),则 运算符的结果为假 (0)。 - 如果操作数为假 (
0),则 运算符的结果为真 (1)。
可以把它理解为“非”或“取反”。
| 操作数A | !A 的结果 |
|---|---|
| 真 (1) | 假 (0) |
| 假 (0) | 真 (1) |
示例:
int isRaining = 0; // 0代表假,表示没下雨
// 检查是否 **没有** 下雨
if (!isRaining) {
printf("天气不错,可以去散步了,\n");
} else {
printf("下雨了,记得带伞,\n");
}
// 输出: 天气不错,可以去散步了。
运算符常用于将一个非零值(在C语言中,任何非零值都视为真)转换为假,或将零转换为真。
示例:
int number = 123; // 一个非零值
// !number 的结果是 0 (假)
if (!number) {
printf("number是0,\n"); // 这行代码不会执行
}
int zero = 0;
// !zero 的结果是 1 (真)
if (!zero) {
printf("number是0,\n"); // 这行代码会执行
}
总结与注意事项
| 运算符 | 名称 | 类型 | 规则 | 示例 |
|---|---|---|---|---|
&& |
逻辑与 | 二元 | 两真才为真,否则为假 | a > 0 && b < 10 |
| 逻辑或 | 二元 | 一真即为真,两假才为假 | a == 1 \|\| b == 2 |
|
| 逻辑非 | 一元 | 取反,真变假,假变真 | !(a > 0) |
重要注意事项:
-
操作数是表达式,而非布尔值:在C语言中,逻辑运算符的操作数可以是任何表达式,编译器会判断表达式的值是否为0,如果值为0,则视为假;如果值为非0,则视为真。
int x = 5; if (x) { // 等价于 if (x != 0) printf("x是非零值,\n"); // 会执行 } -
不要混淆赋值运算符 () 和关系运算符 ():这是一个常见的错误,逻辑运算符通常与关系运算符结合使用,而关系运算符用于比较。
// 错误示例:将赋值 x=5 放在 if 条件中 if (x = 5) { // 这总是为真,因为赋值表达式的结果是5(非零) // ... } // 正确示例:比较 x 是否等于 5 if (x == 5) { // ... } -
运算符优先级: 的优先级最高,其次是
&&,最后是 ,使用括号 可以明确表达计算顺序,提高代码可读性。// 等价于 if ((a > 0) && (b < 10)) if (a > 0 && b < 10) { // ... } // 等价于 if (!(a > 0)) if (!a > 0) { // !a 的结果是0或1,然后与0比较,逻辑上等同于 a <= 0 // ... } // 更清晰的写法是: if (!(a > 0)) { // 或者 if (a <= 0) // ... }
