主要内容 #
1. 关系表达式 #
小结一下之前的大师码课程中,学习的 关系运算符 和 关系表达式。
5 > 6; // 大于 5 >= 6; // 大于等于 5 < 6; // 小于 5 <= 6; // 小于等于 5 == 6; // 等于 5 != 6; // 不等于
2. 逻辑表达式 #
小结一下之前的大师码课程中,学习的 逻辑运算符 和 逻辑表达式。
true && true; // 与 true || true; // 或 !true; // 非
关系运算 和 逻辑运算 是有着内在联系的。
它们可以共同出现。比如:
(5 > 0) && (5 > 2); // 与 (5 > 0) || (5 > 2); // 或 !(5 > 0); // 非
关于它们之间的关系,请区分清楚。
3. “关系运算符”和“逻辑运算符”的“运算优先级” #
在介绍分解法之前,我们需要先简单了解一下“运算优先级”。
在数学中,我们学习过四则运算,还记得加减乘除的“运算优先级”吗?
+ - 运算优先级相等; * / % 运算优先级相等; // C++ 的取余运算,是数学中还没有学习到的。特此补充说明 + - 运算优先级小于(<) * / % //也就是,先计算 * / %
在“关系运算符”和“逻辑运算符”中,其实也有“运算优先级”。
它们的“运算优先级”,从高到底排列如下:
高 - ! 中 - && || 运算优先级相等; 低 - < <= == != > >= 运算优先级相等;
4. 取反 逻辑表达式 #
上节课的学习中,我们学习了逻辑运算“非”。
请看下面的表达式,并在数轴上画出 a 的范围。
-2 < a && a < 2
请看下面的表达式,并在数轴上画出 a 的范围。
!(-2 < a && a < 2)
4.1 图解法 #
答案:
- -2 < a && a < 2
- !(-2 < a && a < 2)
小练习:
请将 !(-2 < a && a < 2) 对应的答案图,改写成“或”关系的表达式。
答案:
!(-2 < a && a < 2) <== 等价于 ==> (-2 >= a || a >= 2) // 写成这个样子更容易理解一些 !(-2 < a && a < 2) <== 等价于 ==> (a <= -2 || 2 <= a)
理解这样的改写,对 C++ 的学习非常重要。针对这一的问题,主要有两种思路。
- 1. 图解法 – 如上面的说明
- 2. 分解法
4.2. 分解法 #
在解题前,我们先来思考以下的几种情形。
请回答:
!(true && true ) <== 等价于 ==> ? !(true && false) <== 等价于 ==> ? !(false && true ) <== 等价于 ==> ? !(false && false) <== 等价于 ==> ? !(true || true ) <== 等价于 ==> ? !(true || false) <== 等价于 ==> ? !(false || true ) <== 等价于 ==> ? !(false || false) <== 等价于 ==> ?
答案:
!(true && true ) <== 等价于 ==> (false || false) !(true && false) <== 等价于 ==> (false || true ) !(false && true ) <== 等价于 ==> (true || false) !(false && false) <== 等价于 ==> (true || true ) !(true || true ) <== 等价于 ==> (false && false) !(true || false) <== 等价于 ==> (false && true ) !(false || true ) <== 等价于 ==> (true && false) !(false || false) <== 等价于 ==> (true && true )
基于上面的分析,我们可以得到这样的规律:
- 1. && 和 || 互换;
- 2. true 和 false 互换;
那接下来我们来看一下,怎么解决上述的问题。
!(-2 < a && a < 2) || \/ !((-2 < a) && (a < 2)) // 根据计算的优先级,加括号。 || \/ !((******) && (#####)) // 将第二层的括号内容,看成整体。 || \/ !(-2 < a ) || !(a < 2) // 先分解最外层括号。 || \/ -2 >= a || a >= 2 // 继续分解当下的最外层括号。
如果遇到多层的逻辑关系嵌套,也像这样,由外向内,逐层分解即可。
小练习:
!(a <=7 || 20 < a ) <== 等价于 ==> !(15 < a && a < 59) <== 等价于 ==> !(a>5) && a < 10 <== 等价于 ==> !(true && false && true) <== 等价于 ==> !(true || false || true) <== 等价于 ==>
答案:
!(a <=7 || 20 < a ) <== 等价于 ==> 7 < a && a <= 20 !(15 < a && a < 59) <== 等价于 ==> a <= 15 || 59 =< a !(a>5) && a < 10 <== 等价于 ==> 5 <= a && a < 10 !(true && false && true) <== 等价于 ==> (false || true || false) !(true || false || true) <== 等价于 ==> (false && true && false)