1.1.5 逻辑运算
📝 学习目标
- 能读懂并计算常见逻辑表达式的真假
- 掌握关系运算符、逻辑运算符的优先级
- 理解短路求值(short-circuit)的规则与陷阱
- 掌握“位运算 + 掩码(mask)”判断某些位是否为 0/1 的做题套路
🎯 知识点
1) 关系运算符(Relational Operators)
常见:
- 大小比较:
><>=<= - 相等/不等:
==!=
课堂提醒:
- 在很多编程语言中:
==表示“相等比较”=表示“赋值”
2) 逻辑运算(Logical Operators)
把 0/1 当作假/真:0=假,1=真。
| 运算 | 记号(常见) | 规则(口语) |
|---|---|---|
| 与 AND | && 或 · 或 * | 都真才真,有一个假就假 |
| 或 OR | ` | |
| 非 NOT | ! 或 ¬ | 取反:真变假、假变真 |
| 异或 XOR | ^ 或 ⊕ | 不同为真,相同为假 |
3) 运算符优先级(软设会考“先算谁”)
按课堂总结(从高到低,记住相对顺序即可):
- 括号
() - 算术运算(
* / %高于+ -) - 关系运算:大小比较(
> < >= <=) - 关系运算:相等比较(
== !=) - 逻辑运算:
!高于&&高于|| - 赋值
=(通常最低)
口诀:先算“非”,再算“与”,最后算“或”;赋值最后做。
4) 短路求值(Short-circuit)
A && B:若 A 为假,则整个表达式必为假,B 不再计算A || B:若 A 为真,则整个表达式必为真,B 不再计算
课堂类比:电路“短路”,后半段不通电。
🧠 难点与易错点
- 易错1:把
==写成=(考试多以“表达式求值”给你坑) - 易错2:忽略短路导致“赋值语句是否执行”判断错误
- 易错3:把逻辑运算(&&/||)和位运算(&/|/^)混为一谈
🔑 关键词解释
- 真假值/布尔值(Boolean):只有 true/false 两种值。
- 短路求值:为了效率与安全,某些运算在结果已确定时不再计算后续子表达式。
- 掩码(mask):用一个常量(常见十六进制)通过按位与/或来筛选某些位。
🔍 联想扩展(常见真题套路)
1) 用掩码判断“某几位是否全为 0”
套路(以“低 4 位是否全 0”为例):
- 设掩码
mask = 0x000F(二进制低4位为1) - 判断:
(A & mask) == 0
原因:
A & 0x000F会“只保留 A 的低 4 位”,其它位清零- 如果结果为 0,说明低 4 位全为 0
2) 判断“某一位是否为 1”
- 判断第 k 位(从 0 开始):
(A & (1 << k)) != 0
🧪 例题(按难度)
简单(3题)
逻辑运算“异或”满足“不同为真,相同为假”。那么 `1 XOR 1` 的结果是:
在常见编程语言(如 C/Java)中,逻辑运算符的优先级关系正确的是:
要判断整数 `x` 是否为奇数,以下条件最合适的是:
例题1(优先级)
若 `a=1, b=2`,判断表达式 `(a > b) || (a == 1)` 的值。
例题2(短路 + 赋值副作用)
设 a=1, b=2, m=1, n=1,表达式:
(a > b) && (m = 0)
求最终 m 的值。
求最终 `m` 的值。
例题3(位运算掩码:课堂同款)
字长 16 位,A=0x005A。判断 A 的低 4 位是否全为 0,应使用哪个条件最合适?
选择最合适的判断条件:
困难(1题)
设有 C/Java 风格代码:
c
int a = 0, b = 0;
if (a != 0 && (++b > 0)) {
// ...
}执行后 b 的值是:
📚 本课小结
- 关系运算先于逻辑运算;赋值通常最后
- 逻辑运算:
!>&&>|| - 短路会影响“后半段是否执行”
- 位运算常配合掩码做“某几位”判断