演算子には計算する優先順位がある。
このページでは演算子の優先順位についてお伝えした。基本的にJavaで紹介するが、他のプログラム言語でも同様だ。
参考にしていただければと思う。
演算子には優先順位がある
プログラミングで演算子を使うときは、その優先順位に気をつけなければいけない。
演算子の優先順位とは、どの順番で演算を行うかを決めるための優先順位のことだ。優先順位が同じであれば、基本的に演算は左から右へ行われる。
しかし、ひとつでも優先度が高いものがあれば、その優先度の高い演算が最初に行われる。演算子を組み合わせて使うとき、この点を注意する必要がある。これから演算子の詳細を学んでいくわけだが、その前に演算子の優先順について学んでおくほうがよい。
実際、優先順位がどうなっているのか見てみよう。
演算子の優先順位のリスト
このリストは、演算子の行の位置が上にあるほど優先順位は高く、下にあるほど優先度は低いことを表している。同じ行の中にあれば、同じ優先順位である。
代入演算子(=)以外のすべての二項演算子は、プログラムの左から右へ演算を行う。一方、代入演算子は、右から左へ値を代入する。
演算子 |
記号 |
優先度 |
後置 |
++ -- |
高い |
前置、単行 |
++ -- + - ~ ! |
↑ |
乗算 |
* / % |
|
加算 |
+ - |
|
シフト |
<< >> >>> |
|
関係 |
< > <= >= instanceof |
|
比較 |
== != |
|
ビット単位積 |
& |
|
ビット単位排他 |
^ |
|
ビット単位和 |
| |
|
論理積 |
&& |
|
論理和 |
|| |
↓ |
三項 |
? : |
低い |
代入 |
= += -= *= /= %= &= ^= |= <<= >>= >>>= |
|
演算子の優先順位を扱ったサンプルプログラム
このプログラムは、加算に対する乗算の位置を変えている。
位置が変わると、演算結果は変わるだろうか。乗算を加算より先に書いても、後に書いても、乗算が加算より優先されるため同じ結果になっている。この点を、もう一度前のセクションの優先順位のリストから確認してほしい。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
public class OperatorPrecedence { public static void main (String[] args) { int result;//[1] result = 2 + 3 * 4;//[2] System.out.println("[3] 2 + 3 * 4 = " + result); result = 3 * 4 + 2;//[4] System.out.println("[5] 3 * 4 + 2 = " + result); result = 2 * 3 * 4 + 5 + 6;//[6] System.out.println("[7] 2 * 3 * 4 + 5 + 6 = " + result); result = 5 + 6 + 2 * 3 * 4;//[8] System.out.println("[9] 5 + 6 + 2 * 3 * 4 = " + result); } } |
実行結果
1 2 3 4 |
[3] 2 + 3 * 4 -> 14 [5] 3 * 4 + 2 -> 14 [7] 2 * 3 * 4 + 5 + 6 -> 35 [9] 5 + 6 + 2 * 3 * 4 -> 35 |
サンプルプログラムの説明
それでは簡単にプログラムの解説をしてゆこう。
- [1] 変数resultを宣言する。
- [2] 変数resultに2 + 3 * 4を代入する。
- [4] resultを表示する。
- [2] 変数resultに3 * 4 + 2を代入する。
- [4] resultを表示する。
- [2] 変数resultに2 * 3 * 4 + 5 + 6を代入する。
- [4] resultを表示する。
- [2] 変数resultに5 + 6 + 2 * 3 * 4を代入する。
- [4] resultを表示する。
括弧()の扱い方
これらの優先順位を変更するためには括弧()を使うことになる。こちらについては下記でお伝えしているので、こちらもご参考に。
まとめ
このページでは演算子の優先順位についてお伝えした。結構細かい設定があるのだが、基本的には乗算などだけ覚えておけばほとんどの場合困らない。
困ったときはこのページを参考にしていただければと思う。
コメント