3

逍遥自在学C语言 | 逻辑运算符 - 知微之见

 1 year ago
source link: https://www.cnblogs.com/Wayne123/p/17293728.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
1511464-20230406181123393-1066935054.png

一、人物简介

  • 第一位闪亮登场,有请今后会一直教我们C语言的老师 —— 自在。
1511464-20230403100945222-934948634.gif
  • 第二位上场的是和我们一起学习的小白程序猿 —— 逍遥。
1511464-20230403101030223-1500558355.gif

二、构成和表示方式

  • 逻辑运算符是用来比较和操作布尔值的运算符
  • 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;
}
  • 运行结果
    1511464-20230406181140950-888456957.png

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;
}
1511464-20230406181150355-1982447698.png

1.3 非运算

#include <stdio.h>
int main() {
    printf("!2 结果为%d\n", !2);
   	printf("!0 结果为%d\n", !0);
    return 0;
}
1511464-20230406181205077-2047611743.png

!! ,将任何值转换为布尔值

  • !!可以将一个整数、字符或指针值转换为一个布尔值。

例如,下面的代码片段中,将字符串转换为布尔值,并将其用于条件判断:

#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;
}

1511464-20230406181219077-1831762139.png

由于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;
}
1511464-20230406181230344-500408549.png

📙 第一个嵌套表达式分析

  • 因为6 > 3的结果为111 - 20的结果为-9,所以(6 > 3) && (11 - 20) && (0 - 1)等价于1 && -1,结果为1
  • a = !(1),结果为0

📘第二个嵌套表达式分析

  • 5 + 4的结果为17 - 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;
}
1511464-20230406181239795-615944418.png
  • 那么实际的运行结果如何呢?
1511464-20230406181303931-536258476.png
1511464-20230406181316114-2143746996.png
  • 因为&& 的优先级高于||,所以-1 && 0会被先运算,结果为0
  • 1 || -1 && 0等价于1 || 0,结果为1
  • a = !(1),结果为0

逻辑运算符的优先级顺序为 ∣∣ < && < !

有兴趣的小伙伴可以参考上面的代码来验证&&!的优先级关系哦!

通过本文的讲解,我们学会了3种逻辑运算符的使用方法及优先级关系,下一篇文章,我们将讲解位运算符。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK