演算子の優先順位
演算子を使った演算を行う場合、「5 + 2」や「8 / 4」のようなものだけではなく「5 + 3 * 4」などのように演算子を複数使用した複雑な演算も可能です。この時に注意するのが演算子の優先順位です。
5 + 3 * 4
上記の場合、「5 + 3」をまず演算し次に「8 * 4」を演算した場合は「32」となります。そうではなく「3 * 4」をまず演算し次に「5 + 12」を演算したばあいは「17」となります。このようにどの演算を先に行うかで結果が異なる場合があります。
そこでどの計算から先に演算が行われるのかを決定するのが演算子の優先順位です。優先順位が高い演算子が先に演算が行われて行きます。各演算子の優先順位は次のようになっています。
(優先順位が高い) ** * / % + - (優先順位が低い)
最も高い優先順位を持つのが「**」です。逆に最も低い優先順位を持つのが「+」や「-」です。
そこで改めて先ほどの例を見てみます。
5 + 3 * 4
ここで使われている演算子は「+」と「*」です。この演算子では「*」の方が優先順位が高いので先に演算が行われます。よって上記の結果は「17」となります。
また同じ優先順位の演算子に優先順位に違いがありません。例えば「+」と「-」の優先順位は同じです。同じ優先順位が使われていた場合は左から順に演算が行われます。
5 + 3 - 4
上記の場合は「+」と「-」の優先順位は同じですので左にある演算子から演算が行われます。よって「5 + 3」が演算され、次に「8 - 4」が演算されます。
括弧による優先順位の変更
演算子の優先順位とは異なる順序で演算を行いたい場合には括弧()を使用します。括弧で囲まれた演算は先に演算が行われます。
(5 + 3) * 4
上記の場合、演算子だけを見ると「+」と「*」では「*」の優先順位が高いですが、括弧で囲われた演算が先に行われますのでまず「5 + 3」が演算され次に「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")
上記のプログラムを「test4-1.rb」として保存します。文字コードはUTF-8です。そして下記のように実行して下さい。
( Written by Tatsuo Ikura )