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

有帮助吗?

解决方案

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;

我想我仍然会使用第一个变体 - 更多括号,但这样我就不必学习另一个规则,并且我忘记它并导致那些奇怪的难以调试错误的风险较小?

只是猜测那部分。

迈克·斯通编辑:正如盖乌斯指出的那样修正了数学

其他提示

这个的另一个版本(在中学时)是“请原谅我亲爱的莎莉阿姨”。

  • 括号
  • 指数
  • 乘法
  • 分配
  • 添加
  • 减法

助记符在学校里很有用,并且在今天的编程中仍然有用。

表达式中的运算顺序,例如:

foo * (bar + baz^2 / foo) 
  • 首先是球拍
  • 阶数(即幂和平方根等)
  • D愿景和 中号乘法(从左到右)
  • A加法和 S减法(从左到右)

来源: http://www.mathsisfun.com/operation-order-bodmas.html

我没有权力编辑 @迈克尔·斯图姆的回答, ,但这并不完全正确。他减少

(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;

当我在小学(加拿大)学到这一点时,它被称为 BEDMAS:

球拍
x 分量
D愿景
中号乘法
A加法
S减法

只为那些来自世界这一地区的人...

无论如何,我不太确定旧的 BODMAS 助记符是否适用于编程。无法保证语言之间的操作顺序,虽然许多语言都按该顺序保留标准操作,但并非所有语言都这样做。还有一些语言的操作顺序并不是那么有意义(例如 Lisp 方言)。在某种程度上,如果您忘记了标准顺序并且对所有内容都使用括号(例如 (a*b) + c)或专门学习您所使用的每种语言的顺序,那么您可能会更好地进行编程。

我在某处读到,特别是在 C/C++ 中,将表达式拆分为小语句更有利于优化;因此,您不必在一行中编写极其复​​杂的表达式,而是将各个部分缓存到变量中并逐步执行每个部分,然后在进行过程中构建它们。

优化例程将在有变量的地方使用寄存器,因此它不会影响空间,但它可以为编译器提供一些帮助。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top