運算次序

在數學和電腦科學中，運算次序（也稱為運算順序、運算子優先順序）是指決定在表示式中的哪一運算子首先被執行的規則。

比如，在四則運算中，一般有先乘除後加減的規定。就是說在這樣的式子中，按規定會先對3和4作乘法，得出12，然後再把2和12加起來，最後就得出14。

自引入現代的代數標記法，乘法總是擁有比加法更高的優先次序。而16和17世紀引入了指數（乘冪）以後，指數總是擁有比加法和乘法更高的優先次序。這個規則的定立消除了混淆並允許了標記更加簡潔。當需要越過這規則，甚至簡單地強調一下，括號 ( ) 會用以標示另一次序或者是強調預定次序來避免混亂。例如  需要加優先於乘，而  需要加優先於乘冪。為了方便閱讀，有時括弧會換為方括弧，例如 。

基本規則
一般用於算術和编程语言的運算次序如下：
乘冪和方根   
乘除   
加減   

當算式中同時存在多層的運算子，最高層級的運算子就優先計算。

因為加法與乘法的交換律和結合律，加法可以按任何左右次序計算，乘法亦然。但運算子混合起來時需要依從運算次序。

在某些場合，把除換成倒數相乘或者把減當成加的相反對於計算更佳。例如在計算機科學中，這允許用少一點二元運算並讓簡化了的表示式更容易利用交換律和結合律。轉換後，，即和的商等於和的積；，和的差等於與的和。於是， 可以想像成 ，三個項用任何次序相加都會得出答案是。

根號√傳統上是透過上面的橫線（線括號）框下被开方数（這避免了框下被开方数時需要括號）。其他函數用括號框著輸入來避免混淆。有時候，當輸入只是單項式，括號可被省略。所以 ，而 ，因為  不是單項式。不少計算機和编程语言都要求函數加上括號。

組合符號可以凌駕這個一般的運算次序。組合符號可以視為單獨表示式。組合符號可以用結合律和分配律去除，而組合符號內的表示式簡單得不會在符號移除後造成混淆的時候，就應該移除。

例子


分數線同樣是組合符號：


為了方便閱讀，其他組合符號例如大括弧 { } 或中括弧 [ ] 會與括弧 ( ) 並用。例如：


負號（一元減號）
一元運算子 − （通常讀「負」）有不同的約定。在手寫和印刷數學，表達  解讀為 。但部分程式和编程语言，典型例子是Microsoft Excel（和其他試算表程式）和编程语言Bc，一元運算子比二元運算子優先，換言之，負號優先於指數，所以在這些語言中  會解讀為 。這不適用於二元減號 − ：例如在Microsoft Excel，=-2^2、=-(2)^2和=0+-2^2會得出4，不過=0-2^2和=-(2^2)會得出−4。

乘除混合
同樣，使用斜杠符號 / 在諸如  之類的表達式中可能會有歧義。如果改寫成並把除法解讀為倒數乘法，就變成：


以此解讀  就等於 。不過在部分學術文書中，省略了乘號的乘法被視為優先於除， 等於  而不是 。舉一例子，學術期刊物理評論的交稿說明中講明乘優先於斜杠符號標示的除，而其他著名物理課本也有此規定，包括朗道和利夫希茨編纂的《理論物理學教程》以及《費曼物理學講義》。

記憶術
基本上，各國都有不同的口訣讓學生記著運算次序。英文的口訣會以運算子的字首構成。

 中文地區一般以「先乘除後加減」作為口訣，但是當中沒有涵蓋指數
 美國普遍使用「PEMDAS」，代表「Parentheses（括號）, Exponents（指數）, Multiplication（乘）/Division（除）, Addition（加）/Subtraction（減）」
 加拿大與紐西蘭使用「BEMDAS」，代表「Brackets（括號）, Exponents（指數）, Multiplication（乘）/Division（除）, Addition（加）/Subtraction（減）」
 英國使用「BOMDAS」或「BIMDAS」，與前者相比，這兩個縮寫純粹改變了指數的詞彙（Orders/Indices）
 其他英語地區普遍使用「BOMDAS」

這些口訣都有機會導致誤導，例如誤以為「先加後減」，就會錯誤地運算。


正確答案是 （但如果先加後減就會變成 ）。

特殊情況
連續乘冪
如果乘冪以堆疊上標的方式呈現，一般規則是從上到下：  (xii+635 pages)

不是等同於 。

但是，以符號 ^ 或箭頭 (↑) 作表其運算子的時候，並沒有普遍標準。例如，Microsoft Excel把a^b^c理解成 ，而Google Search和Wolfram Alpha就理解成 。所以4^3^2在前者會計成4096，在後者會計成262144。

連除
連除也存在同樣的含糊，例如  既可解讀為

又可解讀為

從左至右的計算原則使前者更加普遍。而且把除數變成分數的計算習慣也大大減少了含糊的產生。

參見
 运算
 6÷2(1+2)

資料來源

Category:记忆术
Category:运算符 (编程)
Category:代数