【C语言基础】逻辑操作符(短路相关题目)

逻辑操作符基础知识

逻辑操作符作用于表达式,在C语言中结果会返回0(假)或1(真)

!改变单个表达式的真假,即 真–>假,假–>真
&& 两侧表达式都为真,结果才为真
|| 两侧表达式中至少有一个为真,结果就为真

特点:短路
如果左侧表达式已经满足逻辑运算符的条件,则不再执行右侧的表达式
比如:
表达式1 && 表达式2,如果表达式1求出的结果为假,那么就不会再执行表达式2了,而是直接返回0(假)

表达式1 || 表达式2,如果表达式1求出的结果为真,那么就不会再执行表达式2了,而是直接返回1(真)

题目

int main()
{
       int i = 0, a = 0, b = 2, d = 4;
       i = a++ && ++b && d++;
       
       printf(" i = %d\n a = %d\n b = %d\n d = %d\n", i, a, b, d);
       
       return 0;
}

分析:

a是后++,先使用(a=0,表达式为假),再自增1(a=1)
由于&&有短路的特点,只要有一个表达式结果为假,后面的表达式就不再判断, 直接返回0(假),也就是表达式++b和d++不会执行,并且最后 i = 0

运行结果:
在这里插入图片描述

将上面的题目中a的值改为1后

int main()
{
       int i = 0, a = 1, b = 2, d = 4;
       i = a++ && ++b && d++;

       printf(" i = %d\n a = %d\n b = %d\n d = %d\n", i, a, b, d);

       return 0;
}

分析:

a是后++,先使用(a=1,表达式结果为真),再自增1(a=2)
表达式 a++ 结果不为假,继续判断
b是前++,先自增1(b=3),再使用–>表达式结果不为假,继续判断
d是后++,先使用,后自增1(d = 5)
因为三个表达式结果都为真,所以返回1,最后 i=1

运行结果:
在这里插入图片描述

在上一个题目基础上,将&&改成||后

int main()
{
    int i = 0, a = 1, b = 2, d = 4;
    i = a++ || ++b || d++;

    printf(" i = %d\n a = %d\n b = %d\n d = %d\n", i, a, b, d);

    return 0;
}

分析:

a是后++,先使用(a=1,表达式结果为真),再自增1(a=2)
由于||有短路的特点,即只要有一个表达式为真,那么后面的表达式就不再判断
所以表达式 ++b 和 d++就不再执行
因为表达式a++为真,返回1,所以 i = 1

运行结果:
在这里插入图片描述

在上一个题目基础上,将a的值改为0后:

int main()
{
    int i = 0, a = 0, b = 2, d = 4;
    i = a++ || ++b || d++;

    printf(" i = %d\n a = %d\n b = %d\n d = %d\n", i, a, b, d);
   
    return 0;
}

分析:

a是后++,先使用(a=0,第一个表达式结果为假),再自增(a=1)
第一个表达式判断结果为假,继续往后判断
b是前++,先自增1(b=3),再使用(表达式结果为真)

所以表达式a++ || ++b 即 0 || 3 为真
根据 || 短路的特点,由于 a++ || ++b || d++(可以看成 (a++ ||++b ) || d++ ) 已经有一个表达式为真了, 所以后面的表达式,即d++不会再判断了,并且返回1,所以 i = 1

运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值