运算符优先级与逻辑短路
基础概念
基通俗讲解
运算符有“谁先算”的顺序,叫优先级;同级时按结合性决定左右。逻辑运算符还有短路:一旦结果确定,右侧不再执行——这是阅读程序最常考的坑。
核心必背考点
背直接默写拿分
优先级(由高到低,节选常考):
()括号最高;!逻辑非;++ --(前缀)* / %>+ -< <= > >=>== !=&>^>|>&&>||- 赋值
=几乎最低,+=等复合赋值更低
短路:a && b 若 a 假则 b 不执行;a || b 若 a 真则 b 不执行。
高频难点 / 拉分考点
难考场极易丢分
&(位与)与 &&(逻辑与)完全不同:位与会真的计算每一位,且不短路;逻辑与会短路。混淆导致变量值判断错误。
出题陷阱
坑文字套路
if(a=5)是赋值不是判断,恒真(且 a 变 5)——常见笔误陷阱。i++ + i++行为未定义,初赛一般不考但别自作聪明。
90分高分技巧
技速算捷径
阅读程序遇 &&/||,先判左操作数决定右是否执行;遇 = 与 == 一眼锁定“是否为赋值”。不确定就加括号,考试虽不能改题,但平时练习养成习惯。
梯度真题(含三栏对照)
基础判断输出:短路求值
左侧为假,右侧 ++b 不执行。
| 1 | int a=0,b=5; |
| 2 | if(a>0 && ++b>0) a=1; |
| 3 | cout<<a<<" "<<b; |
▍解析:答案 0 5:a 不满足 a>0,短路,b 仍为 5。
中档位与 vs 逻辑与
& 不短路,两侧都算;结果按位运算。
| 1 | int a=2,b=0; |
| 2 | int x = (b!=0) & (10/b > 1); // 右式仍执行 -> 除0风险! |
| 3 | cout<<x; |
▍解析:此处会运行时除零;若用
&& 则安全短路。考点:位与不短路。压轴自增与优先级
前缀 ++i 先于使用;后缀 i++ 先用后增。区分清楚。
| 1 | int i=3; |
| 2 | int r = ++i * 2; // i先变4, r=8 |
| 3 | cout<<r<<" "<<i; |
▍解析:答案 8 4。
错误代码 / 扣分解析 / 满分代码
❌ 扣分写法
用 = 代替 ==:if(x=0) ...
本意判等,却变成赋值成 0,条件恒假,逻辑全错。
⚠ 扣分解析
把“比较”误写成“赋值”,程序不报错但结果诡异,初赛阅读程序常借此设陷阱,考生看不出变量被改。
✅ 满分写法
if(x == 0) ...
比较用 ==;若需同时赋值并判断,写 if((x=val) != 0) 显式表达意图。
记忆口诀
技📌 记忆口诀
“乘除加减移位比,等不等后再逻辑;与比或高莫记反,短路看左再定右。”
📝 本节自测共 6 题
做完点「提交本节自测」即时判分;单选 / 多选 / 填空混合,答错可一键收入错题本。
C++ 表达式 2 + 3 * 4 的值是?
✅ 正确答案:B
乘法优先级高于加法,先算 3*4=12,再加 2 = 14。
在 !a && b || c 中,优先级最高的是?
✅ 正确答案:A
单目 ! 优先级最高,其次 &&,最后 ||。
int a=1,b=2; a>b ? a : b 的值是?
✅ 正确答案:B
条件为假取冒号后,结果为 b=2。
若 a = 6,b = 4,则 a % b 的结果是 ____ 。(填空) 填空题 中
✅ 正确答案:2
6 除以 4 余 2。
关于 C++ STL,下列说法正确的有哪些?(多选) 多选题 难
✅ 正确答案:ABC
vector 连续、map 红黑树、sort 需随机访问;queue 一般基于 deque,非连续。
布尔值 true 当作整数参与运算时等于 ____ 。(填空) 填空题 易
✅ 正确答案:1
C++ 中 true 即 1,false 即 0。