逍遥自在学C语言 | 逻辑运算符
前言
一、人物简介
- 第一位闪亮登场,有请今后会一直教我们C语言的老师 —— 自在。
- 第二位上场的是和我们一起学习的小白程序猿 —— 逍遥。
二、构成和表示方式
- 逻辑运算符是用来比较和操作布尔值的运算符
- C语言中的逻辑运算符主要有3个,如下表所示
运算符 | 名称 | 示例 | 描述 |
---|---|---|---|
&& | 与 | a && b | 当a和b都为真时,返回真 |
|| | 或 | a || b | 只要a或者b,其中任何一个为真,返回真 |
! | 非 | !a | 如果a的条件为真,返回假 |
- 逻辑运算符的两边可以是变量、数值 或 表达式
?? 变量
a && b
a || b
!a
?? 数值
5 && 3
20 || a
!0
?? 表达式
a+b && c
a-b || c-a
!(a+c)
三、逻辑运算符的应用
1、运算结果
逻辑运算符的运算结果为0(假)或者1(真)
- 当条件成立时结果为
真
,条件不成立结果则为假
。
1.1 与运算
- 实例演示
#include <stdio.h>
int main() {
printf("1 && 2 结果为%d\n", 1 && 2);
printf("0 && 3 结果为%d\n", 0 && 3);
printf("5 && 0 结果为%d\n", 5 && 0);
printf("0 && 0 结果为%d\n", 0 && 0);
return 0;
}
- 运行结果
1.2 或运算
- 实例演示
#include <stdio.h>
int main() {
printf("1 || 2 结果为%d\n", 1 || 2);
printf("0 || 3 结果为%d\n", 0 || 3);
printf("5 || 0 结果为%d\n", 5 || 0);
printf("0 || 0 结果为%d\n", 0 || 0);
return 0;
}
- 运行结果
1.3 非运算
- 实例演示
#include <stdio.h>
int main() {
printf("!2 结果为%d\n", !2);
printf("!0 结果为%d\n", !0);
return 0;
}
- 运行结果
!! ,将任何值转换为布尔值
!!
可以将一个整数、字符或指针值转换为一个布尔值。
例如,下面的代码片段中,将字符串转换为布尔值,并将其用于条件判断:
#include <stdio.h>
int main()
{
char *str = "hello";
int bool_value = !!str;
if(bool_value)
{
printf("str is not null\n");
}
else
{
printf("str is null\n");
}
return 0;
}
- 运行结果
由于hello
是一个非空字符串,所以!!
将其转换为1
,if条件语句的条件将被认为是真,所以第一个printf语句将被执行。
反之,如果字符串“str”为NULL
,则!!
将其转换为0
,if条件将被认为是假,第二个printf语句将被执行。
2、运算符嵌套
-
逻辑运算符是允许嵌套使用的,运算的结果可以继续作为逻辑运算符的一个参数
-
实例演示
#include <stdio.h>
int main() {
int a = !( (6 > 3) && (11 - 20) && (0 - 1) );
int b = !( (5 + 4) && (7 - 8) && (3 < 2) );
printf("a = %d\n", a);
printf("b = %d\n", b);
return 0;
}
- 运行结果
?? 第一个嵌套表达式分析
- 因为
6 > 3
的结果为1
,11 - 20
的结果为-9
,所以(6 > 3) && (11 - 20) && (0 - 1)
等价于1 && -1
,结果为1
- a =
!(1)
,结果为0
??第二个嵌套表达式分析
5 + 4
的结果为1
,7 - 8
的结果为-1
3 < 2
的结果为0- 所以
(5 + 4) && (7 - 8) && (3 < 2)
等价于9 && 0
,结果为0
- a =
!(0)
,结果为1
3、优先级
- 先来看这个实例
#include <stdio.h>
int main() {
int a = !( 1 || -1 && 0 );
printf("a = %d\n", a);
return 0;
}
- 那么实际的运行结果如何呢?
- 因为
&&
的优先级高于||
,所以-1 && 0
会被先运算,结果为0
1 || -1 && 0
等价于1 || 0
,结果为1
- a =
!(1)
,结果为0
逻辑运算符的优先级顺序为 ∣∣ < && < !
有兴趣的小伙伴可以参考上面的代码来验证&&
和!
的优先级关系哦!
小结
通过本文的讲解,我们学会了3种逻辑运算符的使用方法及优先级关系,下一篇文章,我们将讲解位运算符。