2008-08-06 468 views
16

什麼是BODMAS?爲什麼它在編程中很有用?術語「BODMAS」是什麼意思?

+0

[在C和C++中的運算符優先級](http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Operator_precedence) – foxy 2008-10-22 11:16:30

+0

我通常使用空格來顯示四個運算的順序 - *操作,如下所示:a + b * c對於所有其他操作符,我使用括號使操作順序清晰。 – 2008-08-15 00:02:11

+0

今天之前我從未見過BODMAS。我學到了PEMDAS(Parens,Exponents,Multiplication,Division,Addition,Subtraction)。 – FishBasketGordo 2012-05-21 18:05:55

回答

21

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

你認爲答案2 + 3×5?

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

或2 +(3 x 5)= 2 + 15 = 17?

BODMAS可以前來救援,讓我們有章可循,使我們始終得到正確的答案:

(B)拍(O)刻申(d)暫無報價參數(M)ultiplication(A)ddition( S)ubtraction

根據BODMAS,乘法應該總是在加法之前完成,因此17實際上是根據BODMAS的正確答案,並且如果您輸入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; 

我想我還是會用第一種變體 - 更多的括號,但這樣我不必再學習另一條規則,並且遇到忘記它並導致那些奇怪的難以調試錯誤的風險降低?

只是在猜測那部分。

斯通編輯:修正了數學作爲該猶指出

8

的這另一個版本(中學)被「請原諒我親愛的薩莉阿姨」。今天

  • 括號
  • 指數
  • 乘法
  • 加成
  • 減法

的記憶裝置是在學校的幫助,並在編程還是有用的。

5

在表達操作,如順序:

foo * (bar + baz^2/foo) 
  • 球拍第一
  • ø rders(即權力及平方根等)
  • d暫無報價和中號 ultiplication(左到右)
  • ddition和小號 ubtraction(左到右)

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

4

當我在小學(加拿大)瞭解到這一點,有人稱之爲BEDMAS:

球拍
Ë xponents
d暫無報價
中號 ultiplication
ddition
小號 ubtraction

只爲那些來自世界的一部分。 ..

1

我真的不知道如何適用於編程舊的BODMAS助記符無論如何。語言之間的操作順序無法保證,而且許多人仍然按照該順序保持標準操作,但並非所有操作都是如此。然後有一些語言的操作順序並不是真的有意義(例如,Lisp方言)。在某種程度上,如果你忘記了標準的順序,要麼使用一切括號(如(A * B)+ C)或專門學習你工作中的每一種語言的順序很可能進行編程更好。

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

我某處讀到尤其是在C/C++分裂你的表情成小的語句是爲優化更好;所以不必在一行中編寫非常複雜的表達式,而是將這些部分緩存到變量中,並逐步完成每個變量,然後在您繼續構建它們時進行構建。

優化程序將使用寄存器中的地方,你有變量,因此它不應該影響到空間,但它可以幫助編譯器一點點。