C语言中逻辑运算符的使用方法及优先级关系

嵌入式技术

1367人已加入

描述

一、人物简介

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

二、构成和表示方式

  • 逻辑运算符是用来比较和操作布尔值的运算符
  • C语言中的逻辑运算符主要有3个,如下表所示
运算符名称示例描述
&&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 结果为%dn", 1 && 2);
    printf("0 && 3 结果为%dn", 0 && 3);
    printf("5 && 0 结果为%dn", 5 && 0);
    printf("0 && 0 结果为%dn", 0 && 0);
    return 0;
}
  • 运行结果

运算符

1.2 或运算

  • 实例演示
#include < stdio.h >
int main() {
    printf("1 || 2 结果为%dn", 1 || 2);
    printf("0 || 3 结果为%dn", 0 || 3);
    printf("5 || 0 结果为%dn", 5 || 0);
    printf("0 || 0 结果为%dn", 0 || 0);
    return 0;
}
  • 运行结果

运算符

1.3 非运算

  • 实例演示
#include < stdio.h >
int main() {
    printf("!2 结果为%dn", !2);
    printf("!0 结果为%dn", !0);
    return 0;
}
  • 运行结果

运算符

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

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

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

#include < stdio.h >

int main()
{
    char *str = "hello";
    int bool_value = !!str;

    if(bool_value) 
    {
      printf("str is not nulln");
    } 
    else 
    {
      printf("str is nulln");
    }
 
    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 = %dn", a);
    printf("b = %dn", b);
    return 0;
}
  • 运行结果

运算符

第一个嵌套表达式分析

  • 因为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 = %dn", a);
    return 0;
}
  • 那么实际的运行结果如何呢?

运算符

  • 因为&& 的优先级高于||,所以-1 && 0会被先运算,结果为0
  • 1 || -1 && 0等价于1 || 0,结果为1
  • a = !(1),结果为0

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

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

小结

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

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分