712 字
4 分钟
--
逻辑运算
2023-10-12

逻辑运算#

基本概念#

逻辑运算是对逻辑量进行的运算,结果只有1和0。逻辑量是逻辑运算和关系运算的结果。

区间表示#

当然,逻辑运算是很实用的东西,比如,想要表示数学区间,例如整数a∈[3,10),应该怎么表示呢?写出3<=x<10计算机是不会认的,他会进行运算得出x>=3是一个逻辑运算,只会得出0或1。

区间的含义就是这个数要大于最小值小于最大值,我们可以用逻辑运算符&&来写出区间,写法是这样的:

a >= 3 && a < 10

即要a同时满足这两个条件。这样表示在逻辑bool逻辑判断或是if判断甚至是循环里相当重要,例如:

while(a >= 1 && a < 6) {
if(a % 2 == 1) {
a = a + 1;
} else {
a = a + 2;
}
}

这样就可以表示a的取值范围了。

字符判断#

当然,逻辑运算不仅能判断数字,也可以判断字符。比如判断一个字母是否是大写字母,可以这样表示:

c >= 'A' && c <= 'Z'

如果字符c在大写字母A和Z之间,那么它就是一个大写字母啦。

运算优先级#

请看下面这种情况:

!a > 20

这会是a小于等于20吗?

当然不是,运算是从左到右的,!a的结果只能是1或0,经过逻辑运算之后仍旧是1或0。

逻辑运算也有优先级,遵从这样的关系:

! > && > ||

短路规则#

在逻辑运算中,如果左边已经能够得到确定的结果了,就不会进行右边的运算,所以这种代码是不可以实现的:

int a = 2, b = 3;
a == 1 && b == 1;

&&想要成立的条件是两边都必须是true才行,当左边的a!=1成为既定事实,无论右边如何都不会进行判断。

不仅如此,左边成立不成立之后也会跳过右边的运算,比如:

int a = 2, b = 3;
a == 1 && b++;

因为a不等于1,所以b++也不会被执行。

同样的,如果对于||,左边已经正确就不会进行右边的计算和判断。这个东西被称为短路。所以,为了保证不会出现短路,通常要尽可能避免把赋值和复合赋值组合进表达式里。

逻辑运算符表#

运算符描述实例结果
!逻辑非!a如果a的结果是true则变为false,false变为true
&&逻辑与a && b如果a b都是true,则结果为true,否则为false
||逻辑或a || b如果a b都是false,则结果为false,否则为true
逻辑运算
https://vilstia.org/posts/学习笔记/c/逻辑运算/
作者
琴泠 - Lumina Qin
发布于
2023-10-12
许可协议
CC BY-NC-SA 4.0