演算子の優先順位

演算子の優先順位 (えんざんしのゆうせんじゅんい、英: precedence of operators) とは、演算子を利用しているような数式などが、どのように結び付いてグループ化されるべきであるかを、優先順位すなわち構文における優先度の強弱によって、あらかじめ暗黙に定めた規則である。数学ではしばしば、目的のために新しい演算子を導入することがあるが、そういう場合に優先順位があるのなら共通の暗黙の諒解は無いのだから規則を明示する必要がある。また、プログラミング言語では以下に述べるような規則の場合もあるが、APLのように優先順位は無く常に右から左に計算する、というような言語もあるといったように、その言語の設計者の考え方次第である。 算数（初等教育での数学）などが採用している規則では、乗除の演算子は加減の演算子より優先順位が高い。この規則により、2 + 3 × 4 という式における結び付きは、括弧で明示すると 2 + (3 × 4) となる。優先順位があることで、グループ化の明示のための記号である ( と )、{ と }、[ と ] などといった括弧の多用がある程度緩和される。 例えば、一般に多項式は、 a + b × x + c × x 2 + d × x 3 {\displaystyle a+b\times x+c\times x^{2}+d\times x^{3}} といったような形で暗黙の優先順位を利用して書かれるが、もし優先順位が無かったら、 a + ( b × x ) + ( c × x 2 ) + ( d × x 3 ) {\displaystyle a+(b\times x)+(c\times x^{2})+(d\times x^{3})} と書かねばならない。 一方で、演算子の優先順位があるために、括弧の多用が必要になる場合もある。前述の多項式をホーナー法で計算する場合、次の式のように変形するのであるが、 ( ( d × x + c ) × x + b ) × x + a {\displaystyle ((d\times x+c)\times x+b)\times x+a} もし、演算子の優先順位が無く、左から右に計算するという規則だけだったならばこの式には括弧は不要である。 以上のように、演算子の優先順位というものは、そのような規則があったほうが良い場合のほうが比較的多いため、広く使われている暗黙の規則、という程度のものである。 数学史的には、代数学的記法が導入された際、乗法が加法より優先されるようになった。したがって、3 + 4 × 5 = 4 × 5 + 3 = 23 となる。冪乗が16世紀から17世紀に導入されたとき、加法と乗法より優先されるとされ、底の右肩に冪指数を記述するようになった。したがって 3 + 52 = 28 であり、3 × 52 = 75 となる。演算順序を変えたい場合、かつては括線（英語版）（オーバーラインまたは下線）を使っていた。今日では括弧を使って、先に評価すべき式の部分を明示的に囲む。したがって、乗法の前に加法を行うなら (2 + 3) × 4 = 20 などとし、冪乗の前に加法を行うなら (3 + 5)2 = 64 などとする。 冒頭で述べた算数（初等教育での数学）での規則に加え、中等教育（日本の制度における高等学校などまでに相当）で使う演算子まで含め、ここでは説明する。なお、本来であれば2項演算子と単項演算子など、きちんと分類を考えて体系立った説明が必要だが、以下はそのようにはなっていない。 括弧内の項 冪乗と冪根 乗法と除法 加法と減法 これの意味するところは、例えばある数式の項の前後にそれぞれ異なる演算子があった場合、上記一覧の上の方（数字の若い方）にある演算子を先に適用すべきだということである。加法と乗法の交換法則および結合法則により、項の加算は任意の順序で可能であり、乗算も任意の順序で乗算可能だが、それらが混在している場合は標準の優先順位に従わなければならない。 除法を逆数による乗法として扱うことができ、減法を加法的逆元の加法として扱うことができる。すなわち、3 ÷ 4 = 3 • ¼ である。言い換えれば、3を4で割った商は、3と ¼ をかけた積と等しい。同様に 3 − 4 = 3 + (−4) であり、3と4の差は正の3と負の4の和と等しい。この理解により、 1 − 3 + 7 という式は1と負の3と7の和とみなすことができ、任意の順序で計算可能である。すなわち (1 − 3) + 7 = −2 + 7 = 5 と計算することもできるし、 (7 − 3) + 1 = 4 + 1 = 5 と計算することもできる。項の順序を入れ替える際、負号を常に3に付属させることが重要である。1 − (3 + 7) = 1 − 10 = − 9 と計算してはいけない。 平方根記号 √ は被開数（平方根を求める対象となっている数）をグループ化する記号を必要とする。通常使われるグループ化の記号は被開数の上にひかれる横線（括線（英語版））である。他の一般的関数は曖昧さを防ぐために入力を括弧で囲むが、入力が単項式等であれば括弧を省くこともある。例えば、sin x = sin(x) だが、sin x + y = sin(x) + y となる。なぜなら x + y が単項式でないためである。計算機では、一般に全ての関数の入力を括弧で囲む必要がある。 冪指数が積み重なっている場合、一番上の冪乗から計算する。 グループ化の記号は通常の演算子の優先順位を無効にすることができる。グループ化された部分は1つの式として扱うことができる。交換および分配法則を使えばグループ化記号を排除することができる。 1 + 3 + 5 = 4 + 5 = 2 + 5 = 7 {\displaystyle {\sqrt {1+3}}+5={\sqrt {4}}+5=2+5=7\,} 水平な線分（括線）はグループ化記号として機能する。 1 + 2 3 + 4 + 5 = 3 7 + 5 {\displaystyle {\frac {1+2}{3+4}}+5={\frac {3}{7}}+5} 読みやすくするため、通常の丸括弧 ( ) だけでなく、角括弧 [ ] や波括弧 { } をグループ化記号として使うことがある。例えば次のような式である。 [ ( 1 + 2 ) − 3 ] − ( 4 − 5 ) = [ 3 − 3 ] − ( − 1 ) = 1 {\displaystyle [(1+2)-3]-(4-5)=[3-3]-(-1)=1\,} 以上のような規則は、しばしば混乱している。また、身近なコンピュータプログラム（ソフトウェア）などでの扱いが算数教育などでの扱いと違いがあったりする場合には、問題だと主張されることなどもある。 単項演算子としてのマイナス記号（負号）の扱い方はいくつかある。普通に書いた場合、−32 は −(32) = −9 を意味するが、数式を扱うアプリケーションやプログラミング言語（特に Microsoft Office Excel やプログラミング言語bc）では単項演算子を二項演算子より優先しているためマイナス記号は冪乗より優先順位が高く、−32 は (−3)2 = 9 と解釈される。意図した結び付きにならない場合は括弧を使って明示しなければならないし、優先順位をあてにせずに常に括弧を付けるという防御の姿勢をとることもある。 同様にスラッシュ記号 ('/') を数式で 1/2x のように使う際にも曖昧さがある。これを 1 ÷ 2 × x の意味で書いているなら、除算記号を分数を使った乗算で表現していると解釈でき、次のようになる。 1 ÷ 2 × x = 1 × 1 2 × x = 1 2 x {\displaystyle 1\div 2\times x=1\times {\tfrac {1}{2}}\times x={\tfrac {1}{2}}x} すなわちこの解釈では、1/2x を 1/(2x) ではなく (1/2)x と等価とみなしていることになる。Wolfram AlphaやTI-89電卓では、括弧付きでない暗黙の乗法、括弧付きの暗黙の乗法いずれも演算子を明示した乗法と同じ扱いをしている。例えば、2x/2x、2(x)/2(x)、2*x/2*x はいずれも x2 となる。 しかし書籍などでは、演算子を使わない暗黙の乗法を除法より優先すると解釈している場合がほとんどであり、1/2x は (1/2)x ではなく 1/(2x) と解釈している。これは 1 ÷ (2 × x) というよりもむしろ「2x 分の 1」と解釈すべきものである： 1 / 2 x = 1 2 x {\displaystyle 1/2x={\frac {1}{2x}}} 例えばフィジカル・レビュー誌の論文投稿要綱では、スラッシュで表される除法より乗法の優先順位が高いとしており、ランダウとリフシッツの『理論物理学教程』やファインマンの教科書などでも同様の慣習が見られる。 普通に考えて、曖昧な解釈が可能な数式は避けなければならないものである（その意味ではそもそも暗黙の規則である優先順位は、どちらかといえば無くても良いようにしたほうが良いものだと言える）。そのために、組版などで可能であればスラッシュではなく分数の形のほうがよく、無理ならば括弧を使う必要がある。 欧米では、演算子の優先順位を覚えるための記憶術があるが、その頭字語を使った記憶術のせいで間違って覚えることがある。アメリカでは PEMDAS (Parentheses, Exponents, Multiplication, Division, Addition, Subtraction) という頭字語を使う。これを "Please Excuse My Dear Aunt Sally" という文で覚える（各単語の頭文字が所定の順序で並んでいる）。カナダでは BEDMAS、イギリスでは BIDMAS または BODMAS である。Bは Brackets、Iは Indices、Oは Orders を意味する。 これには乗法と除法、加法と減法に優先順位の上下関係があるかのような錯覚を与える欠点があり、そのように覚えてしまうと 10 − 3 + 2 {\displaystyle 10-3+2\,} という式を9ではなく5と計算してしまう可能性がある。「減法よりも加法が優先される」という解釈に基づく場合、 ( 10 + 2 ) − 3 = 9 {\displaystyle (10+2)-3=9} と解釈し正しい結果を得ることも可能である。 そのためニュージーランドでは、PEMA と教えている場合もある。この場合除法と減法が入っておらず、それぞれ乗法と加法と優先順位が等しいことを別途教える。 階乗は感嘆符で表され、その直前（左）にある項に適用される。括弧が関わらない限り、階乗は優先的に計算される。ただし、23! は (23)! = 8! = 40320 を意味するが、23! は 26 = 64 となる。 冪乗が積み重なっている場合、上から計算する。すなわち次のようになる。 a b c = a ( b c ) ≠ ( a b ) c {\displaystyle a^{b^{c}}=a^{(b^{c})}\neq (a^{b})^{c}\,} 中黒を乗法の記号として使うこともあり、その場合は中黒より前の式全体と中黒より後の式全体の乗法を意味することがある[要出典]が、この記法は誤解されやすい。すなわち x + y • a + b は (x + y)(a + b) を意味することがあるが、この意味に解釈する場合後者の記法がより一般的である。同様に、1/a・b が 1/(a・b) を意味することがある。 電卓は機種によって演算子の優先順位が異なる場合がある。もっとも、電卓は数式を評価しているのではなく、単に操作順が数式に類似しているに過ぎず、本質的には、計算機としての内部の計算モデルの違いによるものである。 多くのいわゆる普通の電卓は、入力された順に計算する。例えば、 1 + 2 × 3 = 9 {\displaystyle 1+2\times 3=9\;} となる。これに対し、たいていの「関数電卓」は、加減算中の乗除算について別に計算できるバッファを持っており、 1 + 2 × 3 = 7 {\displaystyle 1+2\times 3=7\;} となる。Microsoft Windowsに添付されているアプリの電卓も、「普通の電卓」と「関数電卓」のモードに応じて、同様に異なった動作をする。 なお以上で説明した「関数電卓」は、いわゆる「標準方式」と呼ばれるもので、近年の関数電卓には数式をそのまま入力して評価する方式のものもある。 冪乗を計算できる電卓の場合、冪乗の結合性（英語版）が左右どちらなのかは機種によって異なる。例えば、TI-92とTI-30XIIで a