什么是BODMAS?为什么它在编程中有用?
答案 0 :(得分: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)rder(D)ivision(M)ultiplication(A)ddition(S)ubtraction
根据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;
我想我仍然会使用第一个变体 - 更多括号,但是这样我就不必学习另一个规则而且我会忘记忘记它并导致那些奇怪的难以调试错误的风险?
虽然只是猜测那个部分。
迈克·斯通编辑:修正数学,因为盖乌斯指出答案 1 :(得分:8)
另一个版本(在中学)是“请原谅我亲爱的莎莉阿姨”。
助记设备在学校很有用,今天仍然可用于编程。
答案 2 :(得分:5)
表达式中的操作顺序,例如:
foo * (bar + baz^2 / foo)
答案 3 :(得分:5)
我没有权力编辑@Michael Stum's answer,但这不太正确。他减少了
(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;
答案 4 :(得分:4)
当我在小学(加拿大)学到这一点时,它被称为BEDMAS:
<强>乙强>球拍
<强>电子强> xponents
的 d 强>暂无报价
的中号强> ultiplication
的 A 强> ddition
<强>取值强> ubtraction
仅限来自世界各地的人......
答案 5 :(得分:1)
我不太确定如何适用于编程旧的BODMAS助记符无论如何。语言之间的操作顺序无法保证,虽然许多语言按顺序保留标准操作,但并非所有操作都遵循。然后有一些语言的操作顺序并不是那么有意义(例如Lisp方言)。在某种程度上,如果您忘记了标准顺序并且对所有内容都使用括号(例如(a * b)+ c)或者专门学习您所使用的每种语言的顺序,那么您最好还是编程。
答案 6 :(得分:0)
我在某处读过,特别是在C / C ++中,将表达式拆分为小语句更适合优化;因此,不是在一行中编写非常复杂的表达式,而是将部分缓存到变量中并逐步执行每个变量,然后在进行中构建它们。
优化例程将在你有变量的地方使用寄存器,这样它就不会影响空间,但它可以帮助编译器。