📄 一句话概括
算术运算符五兄弟 + - * / %,前三个和小学数学一模一样,后两个藏着本章第一对大坑:/ 对整数做除法会丢掉小数,% 只能对整数取余、结果符号跟着被除数走。
一、五兄弟各自的本事
| 运算符 | 名字 | 例子(a=7, b=2) |
结果 |
|---|---|---|---|
+ |
加 | a + b |
9 |
- |
减 | a - b |
5 |
* |
乘 | a * b |
14 |
/ |
除 | a / b |
3(不是 3.5!) |
% |
取余 | a % b |
1 |
先把"符号长相"对齐:乘号是 * 不是 ×,除号是 / 不是 ÷——键盘上没有后两个,教材印刷的 × ÷ 在代码里都要换成 * /。
二、坑一:整数除法丢小数
规则:两个整数相除,结果还是整数——小数部分直接扔掉(不是四舍五入)。
cout << 7 / 2 << endl; // 输出 3(小数 .5 被扔掉,不是四舍五入成 4)
cout << 7 / 2.0 << endl; // 输出 3.5(有一个操作数是浮点,就走浮点除法)
cout << 7.0 / 2 << endl; // 输出 3.5
这就是 2.4.1 埋的伏笔:"想要小数结果,参与运算的至少有一个是浮点"。那个经典错法——double avg = total / n;(total 和 n 都是 int)——除法先在整数世界做完(已经丢了小数),再把结果存进 double,救不回来了。正确写法 double avg = (double)total / n;,把其中一个先变成浮点再除。
顺带的连锁反应:/ 丢掉的小数没消失,它就是 % 的另一半。7 / 2 = 3(商)、7 % 2 = 1(余),商 × 除数 + 余数 = 被除数(3×2+1=7)。这俩是同一道除法的两个答案。
三、坑二:%(取余)的三条规矩
% 是"除完剩下多少":
cout << 7 % 2 << endl; // 1:7 除以 2 商 3 余 1
cout << 10 % 5 << endl; // 0:整除,没剩
三条规矩:
- 只能对整数用。
7.5 % 2直接编译报错——浮点世界里"余数"没有定义(任何数都能被无限切分)。 - 结果符号跟被除数。
-7 % 2得-1(不是 1);7 % -2得1(除数的符号不影响)。背法:余数跟着被除数姓。 - 除数不能是 0。
7 % 0和7 / 0一样,运行时崩溃(不是编译错,是跑起来才炸)。
四、经典用途:% 是"拆数字"的神器
| 用法 | 代码 | 道理 |
|---|---|---|
| 判奇偶 | n % 2 == 0 偶数 |
偶数除 2 没余数 |
| 取个位 | n % 10 |
除 10 剩的就是个位 |
| 取后两位 | n % 100 |
同理 |
| 拆数字 | n / 10 去掉个位 |
商丢掉的就是个位 |
| 循环取数 | i % 3 |
结果永远在 0/1/2 里转圈(第 5 章常用) |
第 6 章会做一个"倒序输出一个整数"的题,用的就是 % 10 拆位 + / 10 去位的组合拳。
五、动手 Demo:拆出一个三位数的每一位
#include <iostream>
using namespace std;
int main() {
int n = 385;
cout << "百位:" << n / 100 << endl; // 3
cout << "十位:" << n / 10 % 10 << endl; // 8
cout << "个位:" << n % 10 << endl; // 5
cout << "奇偶:" << (n % 2 == 0 ? "偶" : "奇") << endl; // 条件运算符先见 3.1.8
return 0;
}
看到什么算成功:输出 3、8、5、奇。重点体会 n / 10 % 10:先 / 10 砍掉个位(385→38),再 % 10 取新的个位(8)。运算符从左往右排队干活。
30 秒实验:把 n 改成 -385,看每个输出变成什么——十位变成 -8(被除数是负的,余数跟它姓),这个实验比背十条规矩都管用。
六、常见误区
- "
/会四舍五入"——不会,是直接砍掉小数。-7 / 2得-3不是-4(往零的方向砍)。 - "
%对小数也能用,顶多结果怪"——不是怪,是编译不过。浮点没有余数。 - "
double avg = a / b;加了 double 就行了"——double在左边只负责存,除法已经在右边做完了。要么(double)a / b,要么a / (double)b,让除法本身在浮点世界进行。 - "负数取余结果是随机的"——不随机,规矩就一条:符号跟被除数。
自测四问(点开对答案)
1. `9 / 4` 和 `9 % 4` 各是多少?——`2` 和 `1`(2×4+1=9)。 2. `5 / 2.0` 和 `5.0 / 2` 分别是多少?——都是 `2.5`,只要有一个是浮点就走浮点除法。 3. `-10 % 3` 等于多少?为什么?——`-1`;余数符号跟被除数。 4. 怎么判断 `n` 是奇数?——`n % 2 != 0`(或 `n % 2`,非 0 即真)。- ☐ 3.1.2 关系运算符(下一节)