5. 逻辑运算符
什么是逻辑运算?
逻辑运算是基于布尔(真/假、1/0)的基本运算,用于在逻辑表达式中求值。
逻辑运算有三种:
- 逻辑与运算(运算符:
&&)。 - 逻辑或运算(运算符:
||)。 - 逻辑非运算(运算符:
!)。
逻辑与运算(&&):
逻辑与运算是参与运算的两个表达式都为真(非零)时,结果为真(1);否则结果为假(0)。
语法
左表达式 && 右表达式
示例:
#include <stdio.h>
int main(int argc, char *argv[]) {
int score = 80;
int result = score >= 60 && score <= 100;
printf("%d\n", result);
score = 59;
result = score >= 60 && score <= 100;
printf("%d\n", result);
return 0;
}
运行结果:
1
0
说明:
逻辑与运算是短路运算,如果第一个表达式为假,则直接返回假值,不再计算第二个表达式的值。
注意:
判断 score 变量的值是否在 60 ~ 100 之间不能使用表达式 60 <= score <= 100,因为条件运算符的结合性是先左后右。因此会先算出 60 <= score 的值,假设结果为x,然后才计算 x <= 100的值。这个逻辑不符合数学中判断区间的计算规则。
逻辑或运算(||):
逻辑或运算是参与运算的两个表达式只要有一个为真(非零)时,结果就为真(1);两个表达式都为假值时结果才为假值(0)。
语法
左表达式 || 右表达式
示例:
#include <stdio.h>
int main(int argc, char *argv[]) {
int score;
printf("请输入成绩:");
scanf("%d", &score);
int result = score < 0 || score > 100;
printf("%d\n", result);
return 0;
}
运行结果:
weimingze@mzstudio:~$ gcc -o myprog myprog.c
weimingze@mzstudio:~$ ./myprog
请输入成绩:80
0
weimingze@mzstudio:~$ ./myprog
请输入成绩:-10
1
weimingze@mzstudio:~$ ./myprog
请输入成绩:200
1
说明:
逻辑或运算是短路运算,如果第一个表达式为真,则直接返回真值,不再计算第二个表达式的值。
逻辑非运算(!):
逻辑非运算是参与运算的一个表达式取非操作(真变假,假变真)。即表达式为真(非零)时,结果为假(0);表达式为假(零值)时,结果为真(1)。
语法
! 表达式
示例:
#include <stdio.h>
int main(int argc, char *argv[]) {
int x = 100;
int y = 0;
printf("!x: %d\n", !x);
printf("!y: %d\n", !y);
printf("!!x: %d\n", !!x);
return 0;
}
运行结果:
!x: 0
!y: 1
!!x: 1
说明:
- 逻辑运算符的优先级是:
!大于&&,&&大于||。 - 逻辑运算符通常用于迭代语句和选择语句中。
- C语言中,任何非零值都被视为 真 ,只有零值(
0或0.0)被视为 假。
练习
写一个程序,任意输入两个整数。
- 求这两个整数 逻辑与运算、逻辑或运算 的值并打印结果。
- 求每个数字的逻辑非运算的值并打印结果。