🔷 第三章 运算符与表达式
📄 一句话概括

算术运算符五兄弟 + - * / %,前三个和小学数学一模一样,后两个藏着本章第一对大坑:/ 对整数做除法会丢掉小数,% 只能对整数取余、结果符号跟着被除数走。

一、五兄弟各自的本事

运算符 名字 例子(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:整除,没剩

三条规矩:

  1. 只能对整数用。7.5 % 2 直接编译报错——浮点世界里"余数"没有定义(任何数都能被无限切分)。
  2. 结果符号跟被除数。-7 % 2 得 -1(不是 1);7 % -2 得 1(除数的符号不影响)。背法:余数跟着被除数姓。
  3. 除数不能是 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(被除数是负的,余数跟它姓),这个实验比背十条规矩都管用。

六、常见误区

  1. "/ 会四舍五入"——不会,是直接砍掉小数。-7 / 2 得 -3 不是 -4(往零的方向砍)。
  2. "% 对小数也能用,顶多结果怪"——不是怪,是编译不过。浮点没有余数。
  3. "double avg = a / b; 加了 double 就行了"——double 在左边只负责存,除法已经在右边做完了。要么 (double)a / b,要么 a / (double)b,让除法本身在浮点世界进行。
  4. "负数取余结果是随机的"——不随机,规矩就一条:符号跟被除数。
自测四问(点开对答案) 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 即真)。

相关笔记