题
什么是 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减法(从左到右)
我没有权力编辑 @迈克尔·斯图姆的回答, ,但这并不完全正确。他减少
(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++ 中,将表达式拆分为小语句更有利于优化;因此,您不必在一行中编写极其复杂的表达式,而是将各个部分缓存到变量中并逐步执行每个部分,然后在进行过程中构建它们。
优化例程将在有变量的地方使用寄存器,因此它不会影响空间,但它可以为编译器提供一些帮助。