运算顺序:为什么 12 + 7 × 3 等于 33

详解 PEMDAS 与 BODMAS 运算顺序规则,以及本计算器实际执行的精确优先级,涵盖乘方、百分号和隐式乘法等边界情况。

运算顺序是决定先计算表达式哪一部分的约定。没有这个约定,12 + 7 × 3 既可能读作 33,也可能读作 57。规则给出的答案是 33,因为乘法要先于加法运算。PEMDAS 和 BODMAS 用两个不同的名字教的是同一条规则,包括本计算器在内的任何表达式解析器,每次按下 = 时都会执行这条规则。

要点速览

  • 12 + 7 × 3 = 33;加上括号后 (12 + 7) × 3 = 57。
  • 乘方从右往左结合:2^3^2 = 512,而 (2^3)^2 = 64。
  • 一元负号的结合力弱于乘方:−5^2 = −25,而不是 25。
  • 后置百分号加的是前面数值的对应占比:200 + 10% = 220。

一张表说清规则

这套步骤在美国被教作 PEMDAS,在英国和大部分英联邦国家则称为 BODMAS 或 BIDMAS:

步骤 PEMDAS BODMAS 含义
1 括号 (Parentheses) 括号 (Brackets) 所有分组内容,从最内层开始
2 乘方 (Exponents) 阶/指数 (Orders / Indices) 乘方和开方
3 乘法与除法 除法与乘法 同级,从左到右
4 加法与减法 加法与减法 同级,从左到右

最常见的误解是把这个缩写当成四个严格的等级。其实不然。乘法并不比除法优先,加法也不比减法优先。每一对运算共享同一等级,按从左到右的顺序计算,这也是为什么 PEMDAS 和 BODMAS 尽管把 M 和 D 的顺序写反,得出的答案却完全一致。运算顺序指南用同一张表逐步演示了具体的计算过程。

示例一:经典陷阱

错误的读法。 12 + 7 × 3 如果严格从左到右计算,会得到 19 × 3 = 57。这不是规则给出的答案。

正确的读法。 先算乘法:7 × 3 = 21,再算 12 + 21 = 33。

输入 12+7*3,计算器返回 33。如果想强制按你自己的顺序计算,用括号:(12+7)*3 返回 57。计算器遵循的是数学规则,而不是你输入的先后顺序。反过来同样成立:100 * 2 + 3 是 203,而 100 * (2 + 3) 是 500。

缩写覆盖不到的空白

这四个字母覆盖了基本情况,但有三种常见情形落在它们之外,在计算器上经常让人栽跟头。

连续乘方从右往左结合

乘方是唯一一个从右往左结合的运算符。2^3^2 的意思是 2^(3^2) = 2^9 = 512,而不是 (2^3)^2 = 64。两者相差很大,所以最好明确写出括号。乘方详解一文更深入地讨论了这个习惯。

百分号是一个后置运算符

% 键在跟在加号或减号后面时,并不是简单地除以 100。在 200 + 10% 中,计算器把百分号读作前面数值的一个占比:200 × (1 + 0.1) = 220。同理,100 - 20% 得到 80,50 + 10% 得到 55。如果想把 200 的 10% 单独算出来作为一个数,输入 200*10%,返回 20。

隐式乘法处于普通优先级

本计算器接受不带乘号的 2π 和 3(4+1),并把它们当作普通乘法处理。有些手持计算器会把隐式乘法排在更高优先级,所以 6÷2(1+2) 在那些机器上得到 1,而在这里得到 9。这种情形并没有统一标准。诚实的解决办法是加括号。百分比指南和入门指南分别介绍了日常使用中最常见的两种失误。

本计算器执行的优先级规则

表达式经由 math.js 解析器运行,实际优先级从高到低依次是:

优先级 运算符 结合方向
1(最高) 括号和函数调用 从最内层开始
2 阶乘 n!、后置百分号 % 从左到右
3 乘方 ^ 从右到左
4 一元负号和正号 从右到左
5 乘法、除法、取模 从左到右
6(最低) 加法、减法 从左到右

示例二:2 + 3 × 4²

按表格自上而下依次计算。括号:无。乘方:4² = 16。乘法:3 × 16 = 48。加法:2 + 48 = 50。输入 2+3*4^2,得到 50。如果某个表达式无法解析,错误提示指南解释了每条提示的含义以及如何调整括号。

示例三:200 + 10%

在这张表中,百分号的处理发生在第 2 步,先于括号之后、乘法之前。所以 200 + 10% 按 200 × (1 + 0.10) = 220 计算。输入 200+10%,计算器返回 220。这也是为什么 100 - 20% 读作打八折:100 × (1 − 0.2) = 80。

常见问题

PEMDAS 和 BODMAS 哪个才对?

两个都对。它们是同一约定的两种助记法。D 和 M 的先后顺序无关紧要,因为乘法和除法同级,无论哪种写法都是从左到右计算。

8 ÷ 2 × 4 等于多少?

16。除法和乘法同级,所以从左到右计算:8 ÷ 2 = 4,再 4 × 4 = 16。

200 + 10% 等于多少?

220。百分号被视为前面数值的一个占比,所以这个表达式表示 200 × (1 + 0.1)。如果想单独得到 200 的十分之一,输入 200*10%,返回 20。

为什么 −5² 等于 −25?

乘方的结合力比一元负号强,所以 −5^2 读作 5² 的相反数。要对负数本身求平方,应写作 (−5)^2,结果是 25。

6 ÷ 2(1 + 2) 等于多少?

本计算器把隐式乘法放在普通乘法的优先级上,给出 9。有些手持计算器会把这个优先级提高,给出 1。这种写法本身就有歧义,安全的做法是用括号明确表达。