"BODMAS"这个术语是什么意思?

16
什么是BODMAS,为什么在编程中很有用?

我通常使用空格来显示四个+-/操作的运算顺序,例如:a + bc。对于所有其他运算符,我使用括号来明确运算顺序。 - Paige Ruten
C和C++中的运算符优先级 - foxy
我今天才第一次见到BODMAS。我学的是PEMDAS(括号、指数、乘法、除法、加法、减法)。 - FishBasketGordo
7个回答

20

http://www.easymaths.com/What_on_earth_is_Bodmas.htm:

你认为2 + 3 x 5的答案是多少?

是(2 + 3) x 5 = 5 x 5 = 25吗?

还是2 + (3 x 5) = 2 + 15 = 17?

BODMAS可以帮助我们制定规则,以便我们始终获得正确的答案:

(B)括号 (O)顺序 (D)除法 (M)乘法 (A)加法 (S)减法

根据BODMAS,加法之前应该先进行乘法,因此根据BODMAS,17实际上是正确的答案,如果您输入2 + 3 x 5,计算器也会给出这个答案。

在编程中为什么有用?不确定,但我认为这是因为可以消除一些括号吗?我是一个相当保守的程序员,所以我的代码可能看起来像这样:

result = (((i + 4) - (a + b)) * MAGIC_NUMBER) - ANOTHER_MAGIC_NUMBER;

使用BODMAS规则可以让这个问题更加明晰:

result = (i + 4 - (a + b)) * MAGIC_NUMBER - ANOTHER_MAGIC_NUMBER;

我认为我仍然会使用第一种变体 - 多一些括号,但这样我就不必再学习另一个规则,也可以避免遗忘并导致那些难以调试的奇怪错误?

只是猜测那个部分。

Mike Stone编辑:根据Gaius的指出修正了数学问题。


1
说实话,我更喜欢你的“有括号”的风格,而不是所谓的优化版本。也许只是我个人的感觉,但我觉得 ">result = (((i + 4) - (a + b)) * MAGIC_NUMBER) - ANOTHER_MAGIC_NUMBER;" 这种写法在脑海中更容易理解... - ZombieSheep

8

这个助记符在学校很有用,今天在编程中仍然很有用。另一个版本是(在中学时)“请原谅我亲爱的阿姨萨莉”。

  • 括号
  • 指数
  • 乘法
  • 除法
  • 加法
  • 减法

5
我没有权限编辑@Michael Stum的回答,但是它并不完全正确。他减少了
(i + 4) - (a + b)

为了

(i + 4 - a + b)

它们并不相等。整个表达式的最佳简化形式如下:
((i + 4) - (a + b)) * MAGIC_NUMBER - ANOTHER_MAGIC_NUMBER;

或者

(i + 4 - a - b) * MAGIC_NUMBER - ANOTHER_MAGIC_NUMBER;

5

4

当我在加拿大上小学时,学习这个知识点时被称为BEDMAS:

Brackets(括号)
Exponents(指数)
Division(除法)
Multiplication(乘法)
Addition(加法)
Subtraction(减法)

仅供来自该地区的人参考...


同样,在新西兰,“指数”对我来说比通用名称“阶数”更有意义。 - Orion Edwards

1

我不确定旧的BODMAS记忆法在编程中有多少适用性。语言之间的操作顺序没有保证,虽然许多语言按照标准操作顺序进行,但并非所有语言都是如此。还有一些语言,操作顺序并不是很有意义(例如Lisp方言)。从某种意义上说,如果您忘记标准顺序并使用括号来表示所有内容(例如(a * b)+ c),或者特别学习每种语言的顺序,那么您在编程方面可能会更好。


0
我曾在某处读到,特别是在C/C++中,将表达式分成小语句对于优化更好;因此,您可以将复杂的表达式拆分成多个部分,并将它们缓存到变量中,逐步执行每个部分,然后随着进展逐步构建它们。
优化程序将在您使用变量的地方使用寄存器,因此不应影响空间,但它可能会对编译器有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接