逻辑操作符:&& , || , !
逻辑运算符提供逻辑判断功能,⽤于构建更复杂的表达式,主要有下⾯三个运算符。
- ! :逻辑取反运算符(改变单个表达式的真假)。
- && :与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则为假)。
- || :或运算符,就是或者的意思(两侧⾄少有⼀个表达式为真,则为真,否则为假)。
注:C语⾔中,⾮0表⽰真,0表⽰假
逻辑取反运算符 !
⽐如,我们有⼀个变量叫
flag
,如果flag为假,要做⼀个什么事情,就可以这样写代码:
![](https://img-blog.csdnimg.cn/direct/ce476aaeb9aa41199a58ce6fad922a16.png)
输出结果:
![](https://img-blog.csdnimg.cn/direct/799540ad7d51490195b98cc547297035.png)
如果
flag
为真,
!flag
就是假,如果
flag
为假,
!flag
就是真
所以上⾯的代码的意思就是
flag
为假,执⾏if语句中的代码。
与运算符
&& 就是与运算符,也是并且的意思, && 是⼀个双⽬操作符,使⽤的⽅式是 a&&b , &&
两边的表达式都是真的时候,整个表达式才为真,只要有⼀个是假,则整个表达式为假。
⽐如:如果我们说⽉份是3⽉到5⽉,是春天,那使⽤代码怎么体现呢?
![](https://img-blog.csdnimg.cn/direct/b4a551f9a81b4f76811fcdb0f968db8d.png)
这⾥表达的意思就是month既要⼤于等于3,⼜要⼩于等于5,必须同时满⾜。
输出结果:
![](https://img-blog.csdnimg.cn/direct/16b59d96367d4387b2df7b3d6200c7f1.png)
或运算符
|| 就是或运算符,也就是或者的意思, || 也是⼀个双⽬操作符,使⽤的⽅式是 a || b , ||
两边的表达式只要有⼀个是真,整个表达式就是真,两边的表达式都为假的时候,才为假。
⽐如:我们说⼀年中⽉份是12⽉或者1⽉或者2⽉是冬天,那么我们怎么使⽤代码体现呢?
![](https://img-blog.csdnimg.cn/direct/418cdb1d1bad4127b2585ef002749853.png)
输出结果:
![](https://img-blog.csdnimg.cn/direct/39fdb778804f4601ae5453b81c99cd6a.png)
练习:闰年的判断
输⼊⼀个年份year,判断year是否是闰年
闰年判断的规则:
1.
能被4整除并且不能被100整除是闰年
2.
能被400整除是闰年
验证:
![](https://img-blog.csdnimg.cn/direct/6ee4624ba675472aafd698804a00afe5.png)
输出结果:
![](https://img-blog.csdnimg.cn/direct/4c5a0f2c508444c2bc46a7232515ba4d.png)
短路
C语⾔逻辑运算符还有⼀个特点,它总是先对左侧的表达式求值,再对右边的表达式求值,这个顺序是保证的。
如果左边的表达式满⾜逻辑运算符的条件,就不再对右边的表达式求值。这种情况称为“短路”。
如前⾯的代码:
![](https://img-blog.csdnimg.cn/direct/4a930709f265458096da3e241456b4d5.png)
表达式中&& 的左操作数是
month >= 3
,右操作数是
month <= 5
,当左操作数
month >= 3 的
结果是0的时候,即不判断 month <= 5
,整个表达式的结果也是0(不是春季)。
所以,对于&&操作符来说,左边操作数的结果是0的时候,右边操作数就不再执⾏。
对于
||
操作符是怎么样呢?我们结合前⾯的代码:
![](https://img-blog.csdnimg.cn/direct/76867f22fc0c4fc1ac5818667a035220.png)
如果month == 12,则不⽤再判断month是否等于1或者2,整个表达式的结果也是1(是冬季)。
所以,
||
操作符的左操作数的结果不为0时,就⽆需执⾏右操作数。
像这种仅仅根据左操作数的结果就能知道整个表达式的结果,不再对右操作数进⾏计算的运算称为短路求值。
练习:阅读代码,计算代码输出的结果
验证1:
输出结果:
验证2:
输出结果: