
一起动脑筋 · 先看一个小故事
女孩有 3 袋糖,每袋 4 颗,又收到 2 颗。机器人会先算哪一部分?
把过程摊开来看
- 袋内总数3 乘 4 得 12
- 加上散糖12 加 2
- 最终结果14
运算符表达加减乘除等动作。乘除通常比加减先算,括号可以明确我们要先算的部分。
3 * 4 + 2 得 14,而 3 * (4 + 2) 得 18,它们描述的是不同的分组。
01四个基本算术运算符
+
加法
-
减法
*
乘法
/
除法
int a = 8;
int b = 3;
a + b; // 11
a - b; // 5
a * b; // 2402整数除法为什么特别?
如果两个操作数都是整数,C++ 会进行整数除法:
8 / 3 // 结果是 2
小数部分会向 0 的方向截去。
-8 / 3 // 结果是 -2
03怎样得到小数结果?
至少让一个操作数是浮点数:
8.0 / 3.0
8.0 / 3
static_cast<double>(8) / 3
这些都会进行浮点除法,结果约为 2.666...。
04先乘除还是先加减?
C++ 有运算符优先级:
2 + 3 * 4 // 14
乘法优先于加法。
如果希望先加:
(2 + 3) * 4 // 20
05计算结果也可能溢出吗?
会。例如两个很大的 int 相乘,结果可能超出 int 可表示范围。
对有符号整数来说,溢出属于未定义行为。
06除以 0 会怎样?
整数除以 0 是错误操作,会导致未定义行为。
int x = 10 / 0; // 错误
所以程序在除法前常要先检查除数是不是 0。
你已经知道了什么
+ - * /可以做基本算术运算。- 整数除法会向 0 截去小数部分。
- 浮点除法需要浮点类型参与。
- 表达式遵守运算符优先级,括号可以明确顺序。
- 整数运算可能溢出,除数不能是 0。
下一篇:%:余数为什么这么有用?
轮到你来试一试
2 + 3 * 4 是 20 吗?怎样改成先加再乘?
想好了吗?点开看解释
原式先乘,结果是 14。写成 (2 + 3) * 4 才得到 20,括号改变了计算的分组。