📄 一句话概括
计算机的四则运算和小学算术几乎一样,只多了一个数学课上没有的成员——取余(%),还有一个【除法有两种】的新规矩:真除给小数、整除给商。
📝 本节和前面几节的关系
3-1/3-2 讲数字怎么表示、位怎么运算,这一篇回到人能看懂的层面——算术运算符。回收树莓派课 6-3 的 / 永远返回小数那条规矩,在这里补上【为什么】。
一、五种算术运算符
| 运算符 | 名字 | 例子 | 结果 |
|---|---|---|---|
+ - * |
加减乘 | 3 + 2 * 4 |
乘除先算:11 |
/ |
真除 | 7 / 2 |
3.5(返回小数) |
// |
整除(取商) | 7 // 2 |
3(舍掉小数部分) |
% |
取余 | 7 % 2 |
1 |
** |
幂 | 2 ** 10 |
1024 |
取余是被数学课漏掉的好东西——它的日常用途比商还多:判断奇偶(n % 2)、每 N 个换一行(i % 5)、从秒数里算分钟(total % 60)、哈希分桶(3-13 会用到)。
二、两种除法的分工
- 真除
/:数学课教的除法,永远给准确结果。Python 里/的结果永远是小数(8 / 2也是4.0)——树莓派课踩过的坑,根源在这里; - 整除
//:只要商、舍掉余数(向小的方向取)。C/C++/Java 的整数除法默认就是整除——7 / 2得 3,这一点 Python 和 C 家族刚好不同。
余数关系一条恒等式:被除数 = 商 x 除数 + 余数(7 = 3x2 + 1)——两种除法合起来才是一支完整铅笔。
三、优先级:不用背表,用常识+括号
乘除高于加减(3 + 2 * 4 = 11);同级别的从左往右算;拿不准就加括号——(3 + 2) * 4 = 20。括号不花钱,bug 花钱。
四、动手 Demo:奇偶判断与拆分钟数
n = 7
print(n % 2 == 0) # False -> 7 是奇数
total = 500 # 500 秒
print(total // 60, "分", total % 60, "秒") # 8 分 20 秒
看到什么算成功:输出 False 和 8 分 20 秒。
读结果:500 除以 60,商 8 余 20——// 拿商、% 拿余数,两者拼起来不多不少。判断奇偶那行把【取余】和【比较】接在了一起(比较运算符是 3-5 的主角)。
五、30 秒实验
跑一遍 7 / 2、7 // 2、7.0 // 2 三个表达式:分别得到 3.5、3、3.0。第三行最值得看——连【浮点数整除】也存在,结果是 3.0(小数点在,小数部分没了)。
六、常见误区
- 【整数除法的结果一定是整数】——在 C/Java 里对,在 Python 里错:
/永远返回小数(3.5 而不是 3)。 - 【取余只能用在正数上】——错。负数也能取余(Python 里
-7 % 3 = 2,跟 C 的 -1 还不一样)——负数取余各语言规则有差异,别跨语言死记结论。 - 【
2 ** 10和2 * 10是一回事】——错。**是幂(1024),*是乘(20)。
自测三问(点开对答案)
1. **`17 % 5` 和 `17 // 5` 各是多少?** 答:`17 % 5 = 2`(余数)、`17 // 5 = 3`(商),验算 3x5+2=17 成立。 2. **判断一个数能不能被 3 整除的最短写法?** 答:`n % 3 == 0`——余数为零就是整除。 3. **为什么老手爱写 `(a + b) / 2` 时提醒加括号?** 答:不涉及这里优先级陷阱,但任何拿不准的混合运算都该用括号写明意图,防的是读代码的人(和未来的自己)误解。- ☐ 下一节(3-4 变量、常量)
相关笔记
- 逻辑运算、位运算、移位运算 —— 位级别的运算
- 树莓派 6-3 · Python 变量与运算符 ——
/永远返回小数那条坑的出处 - C++ 3.1.1 · 算术运算符 —— C 家族整数除法的另一面
- ⌨️ 编程原理 · 索引 —— 全课路线图