首页 > 编程笔记 > C语言笔记 阅读:40

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 > 0temp < 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)的特性,即在某些情况下不会计算整个表达式:


【实例】短路求值。

#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 种逻辑运算符的用法以及注意事项。

相关文章