C语言逻辑操作符:&& , || , !详解

本文介绍了C语言中的逻辑运算符如取反、与(&&)和或(||)的用法,重点讲解了短路现象,即在满足一定条件下,运算符会跳过右侧表达式的计算。通过实例展示了&&和||的不同行为以及短路问题在编程中的实际应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先要理解逻辑操作符是什么,它就像我们的头脑一样对c语言的各种各样条件语句进行判断;

逻辑运算符提供逻辑判断功能,⽤于构建更复杂的表达式,主要有下⾯三个运算符。
简单介绍一下各个功能:
:逻辑取反运算符(常常用于改变表达式的真假);
&&:与运算符,即我们常说的并且的意思(口诀:全真即真,一假即假);
|| :或运算符,即我们常常说的有就行(口诀:有真即真,全假即假);
而真真假假在c语言当中也就是‘1’和‘0’;
为了弄清楚&&和||的区别,因为我们常常在写代码的时候一下子分不清楚他们之间的区别,我举一个简单的例子;
&&:老师让后排的张三和李四去搬书,书很多需要两个人去搬,不然10分钟内搬不完,那么显而易见,只有张三李四都去才能搬完也就是(1,1,真)否则无论只有张三去(1,0,假),还是只有李四去(0,1,假)或者他们都不去(0,0,假)结果都是搬不完;
对照下面表格就能看明白了:
张三(a)李四(b)搬书(a&&b)
010
100
111
000
这样不难看出||的方法,还是差不多的例子:老师让后排的张三和李四去搬书,书很不多两个人随便谁去搬,都能搬完,那么显而易见,张三李四都去能搬完也就是(1,1,真)否则无论只有张三去(1,0,真),还是只有李四去(0,1,真)都可以办完除非他们都不去(0,0,假)

张三(a)李四(b)搬书(a||b)
011
101
111
000

然后主要想介绍的还是一个关键 短路

什么是短路问题?

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

当我们左边的判断条件a>=3已经为假右边的表达式将不再进行判断,因为就算判断为真但是&&的运算来看整个判断条件依旧为假,所以右边操作就不执行;所以,对于&&操作符来说,左边操作数的结果是0的时候,右边操作数就不再执⾏。

所以看这个代码的结果就可以清楚推理出来:

a = a++ && b++ && c++;从左向右来看a=0,所以对于第一个判断即为假不对后面的表达式进行求值,所以结果为:

改变一下就可以了(也可以改成前置++)

这就是&&的短路问题。同样||也存在短路问题;

||的判断逻辑来看当第一个表达式判断为真时,就不对后面的表达式进行判断。

下面是一个例子:

这里有个先后的问题,后置++先判断,由于a为真,所以不在对a进行求值,有人可能会这犯难。

不难看出当第一个表达式为真时,||不对后面的表达式进行操作。

这也就是短路问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值