admin管理员组文章数量:1487745
【C语言】神奇的“短路”
C语言短路简介
C语言的短路现象一般出现在逻辑运算符上,它有⼀个特点,就是总是先对左侧的表达式求值,再对右边的表达式求值,这个顺序是保证的。 如果左边的表达式满⾜逻辑运算符的条件,就不再对右边的表达式求值。这种情况称为“短路”。
逻辑与的“短路”
逻辑与操作符&&的规则是:只要有任何一边为假,那么结果就为假,只有两边同时为真,那么结果才为真,那么逻辑与怎么产生短路的呢?比如以下代码:
代码语言:javascript代码运行次数:0运行复制if(month >=4 && month <=6)
上述代码会先判断输入的month是否大于等于4,如果输入的month的值不大于等于4,也就是已经有一边的结果为假,那么接下来就不会判断后面的小于等于6的条件,会直接返回假值,这就叫“短路”。如果输入的month的值大于等于4,才会对后面的小于等于6作判断。
逻辑或的“短路”
对于逻辑操作符||是怎么样的呢?比如以下代码:
代码语言:javascript代码运行次数:0运行复制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,其余值不变。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2024-09-27,如有侵权请联系 cloudcommunity@tencent 删除变量本文标签: C语言神奇的“短路”
版权声明:本文标题:【C语言】神奇的“短路” 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/shuma/1754829951a3180142.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论