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

说明:

练习

写一个程序,任意输入两个整数。

  1. 求这两个整数 逻辑与运算、逻辑或运算 的值并打印结果。
  2. 求每个数字的逻辑非运算的值并打印结果。