演算子の優先順位の考え方

演算子を使った演算を行う場合注意するのが演算子の優先順位です。複数の演算子が一つの式に含まれる場合にはどの演算子から先に演算を行うのかを気を付ける必要があります。ここでは Ruby の演算子の優先順位の考え方について解説します。

(Last modified: )

演算子の優先順位

演算子を使った演算を行う場合、 5 + 28 / 4 のようなものだけではなく 5 + 3 * 4 などのように演算子を複数使用した複雑な演算も可能です。この時に注意するのが演算子の優先順位です。

5 + 3 * 4

上記の場合、 5 + 3 をまず演算し、その結果の 8 と 4 を乗算し 8 * 4 を演算した場合は 32 となります。そうではなく 3 * 4 をまず演算し、その結果の 12 と 5 を加算し 5 + 12 を演算したばあいは 17 となります。このようにどの演算を先に行うかで結果が異なる場合があります。

そこでどの計算から先に演算が行われるのかを決定するのが演算子の優先順位です。優先順位が高い演算子が先に演算が行われて行きます。四則演算を行う演算子の優先順位は次のようになっています。

(優先順位が高い)
  **
  *  /  %
  +  -
(優先順位が低い)

最も高い優先順位を持つのが ** です。逆に最も低い優先順位を持つのが +- です。

そこで改めて先ほどの例を見てみます。

5 + 3 * 4

ここで使われている演算子は +* です。この 2 つの演算子では * の方が優先順位が高いので先に 3 * 4 の演算が行われます。よって上記の結果は 17 となります。

また同じ優先順位の演算子に優先順位に違いがありません。例えば +- の優先順位は同じです。同じ優先順位が使われていた場合は左から順に演算が行われます。

5 + 3 - 4

上記の場合は +- の優先順位は同じですので左にある演算子から演算が行われます。よって 5 + 3 が演算し、その結果である 8 から 4 を減算した 8 - 4 が演算されます。

括弧による優先順位の変更

演算子の優先順位とは異なる順序で演算を行いたい場合には括弧 () を使用します。括弧で囲まれた演算は先に演算が行われます。

(5 + 3) * 4

上記の場合、演算子だけを見ると +* では *の優先順位が高いですが、括弧で囲われた演算が先に行われるためまず 5 + 3 が演算され、その結果である 8 と 4 を乗算し 8 * 4 が演算されます。結果は 32 です。

括弧の中に複数の演算子が使われている場合は演算子の優先順位によって演算が行われます。また括弧が多重に使用されている場合は内側の括弧が先に演算されます。

2 * ((5 + 3) * 4 - (4 + 5) / 3)

上記の場合は次のように演算が行われます。

1)5 + 3 = 8     >  2 * (8 * 4 - (4 + 5) / 3)
2)4 + 5 = 9     >  2 * (8 * 4 - 9 / 3)
3)8 * 4 = 32    >  2 * (32 - 9 / 3)
4)9 / 3 = 3     >  2 * (32 - 3)
5)32 - 3 = 29   >  2 * 29
6)2 * 29 = 58

「>」の右側はまだ演算が行われていない演算式です。複雑な式であっても括弧と優先順位によって必ず演算される順序は 1 つに決まります。

※関係演算子や論理演算子も含めた演算子の優先順位は「演算子の優先順位(関係演算子、論理演算子)」を参照して下さい。

サンプルコード

では簡単なプログラムで確認してみます。

#! ruby -Ku

print("5 + 3 * 4 = ", 5 + 3 * 4, "\n")
print("5 + 3 - 4 = ", 5 + 3 - 4, "\n")
print("(5 + 3) * 4 = ", (5 + 3) * 4, "\n")
print("2 * ((5 + 3) * 4 - (4 + 5) / 3) = ", 2 * ((5 + 3) * 4 - (4 + 5) / 3), "\n")

下記のように実行して下さい。

演算子の優先順位

-- --

Ruby の演算子の優先順位の考え方について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。