【C语言】神奇的“短路”

在这里插入图片描述

C语言短路简介

C语言的短路现象一般出现在逻辑运算符上,它有⼀个特点,就是总是先对左侧的表达式求值,再对右边的表达式求值,这个顺序是保证的。
    如果左边的表达式满⾜逻辑运算符的条件,就不再对右边的表达式求值。这种情况称为“短路”。

逻辑与的“短路”

    逻辑与操作符&&的规则是:只要有任何一边为假,那么结果就为假,只有两边同时为真,那么结果才为真,那么逻辑与怎么产生短路的呢?比如以下代码:

if(month >=4 && month <=6)

上述代码会先判断输入的month是否大于等于4,如果输入的month的值不大于等于4,也就是已经有一边的结果为假,那么接下来就不会判断后面的小于等于6的条件,会直接返回假值,这就叫“短路”。如果输入的month的值大于等于4,才会对后面的小于等于6作判断。

逻辑或的“短路”

对于逻辑操作符||是怎么样的呢?比如以下代码:

if(month == 12 || month==1 || month == 2)

   逻辑或操作符||的规则是:只要有任何一边为真,那么结果为真,只有两边同时为假,那么结果才为假。当我们输入一个month值时,如果输入的是11时,表达式就会直接返回真,而不会继续后面的判断,这就是逻辑或的“短路”,如果输入的不是12,1,2中的值,才会一一判断,最后返回假。

练习:

练习1:

试着计算以下代码的运行结果:
在这里插入图片描述

练习2:

在这里插入图片描述

练习答案及解析

练习1:

答案:
在这里插入图片描述

解析:
   为什么会得到这样的结果呢?这就要运用到我们今天学习到的短路,在逻辑与中,只要与上的表达式中有一个为假,那么结果就为假,只有全为真,结果才为真。
   如果在前面判断时已经遇到假,那么就会短路,不再执行后面的语句,直接返回假。
   在上述例子中,首先判断a++的结果,我们前面讲过,后置++是使用原本的值放在表达式中,使用完后再对a进行自增1,由于a被初始化为0,所以在表达式中直接使用了0,再对a加1,此时a变成1,但是由于0表示假,在逻辑与中碰到假,不会再对后面的表达式进行判断,直接短路,由此可以得出,只有a加1后变成了1,其他的变量不会发生变化,就得到了如上的结果。

练习2

答案:
在这里插入图片描述
解析:
   在逻辑或中,只要有一个条件为真,那么结果就返回真,只有全为假才会返回假。
   如果在前面判断时已经碰到真,那么就不再判断后面的表达式,直接返回真,这就是逻辑或的短路。而只有碰到假才会继续判断后面的表达式。
   在这里,由于后置++的a被初始化为0,所以在表达式中直接使用了0,再对a加1,此时a变成1,由于使用的0表示假,所以会继续判断后面的表达式。
   此时来到后面一个表达式,前置++的b被初始化为了2,前置++的规则是先自增1,再使用,此时b就是3,而在C语言中,非零为真,此时逻辑与操作符遇到了真,就短路了,直接返回真,不会再判断后面的表达式,所以结果就是a加1变成1,b加1变成了3,其余值不变。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值