演算子の優先度 Javaプログラミング初心者の記録vol.17

スポンサーリンク
演算子の優先度のタイトル画像 Java攻略
スポンサーリンク

はじめに

演算子の記事の中で何度か、「演算子には優先順位がある」と書いた。

今回はその演算子の優先度について、それぞれの演算子ごとの順位、演算子全体での優先度の順位をまとめようと思う。

演算子の優先順位とは

演算子の優先順位とは何ぞやについてだが、簡単に言えば同じ式に書かれていても優先的に計算される演算子があるということ。

学校の授業を思い出してほしい。

(ほとんど忘れたけど…)

足し算と引き算、掛け算と割り算が同じ式にあったら掛け算や割り算から計算しなさいと習ったはず。
例えばこんな式。

2 x 3 + 5 – 6 ÷2

この式の場合、まず掛け算と割り算を先に計算しないといけないから「2×3」と「6÷2」をまず計算する。
こんな感じで、同じ式内に書かれて、なおかつ後ろの方に書かれている(+や-は÷の前にあるのに先に÷の方が計算される)ほうが先に計算されることがある

これが、今回まとめる演算子の優先順位。

算術演算子の優先順位

算術演算子は四則演算(足す、引く、掛ける、割る)「+、-、*、/」の4つと余りの「」の5つ。
参考:Javaプログラミング初心者の記録 演算子-算術演算子のまとめ Vol.10

上でも少し言っちゃったけど、この中で演算子の優先順位が高い順番に並べると以下のようななる。

  1. */(掛け算、割り算、余り)
  2. +(足し算、引き算)

演算子が同じ優先度の場合

掛け算、割り算、余りの演算子は同じ優先度。
優先順位が同じだったら、順番に計算していくということ。

例)5*6/2%2
⇒最初に「5*6」、その後に「30(5*6の結果)/2」、「15(30割る2)%2」と順番に計算していくということ。

同じ式の中に異なる優先度がある場合

もし同じ式の中に、違う優先順位の演算子があったら優先度の高い演算子から計算する。

例)5+9*2-6/2
⇒この式の場合、「+、*、-、/」と4つの演算子がある。
「*」と「/」の演算子が「+」と「-」より優先度が高いため「*」と「/」の計算が先。

計算の順番としては、「9*2」を計算⇒「6/2」を計算⇒「5+18(9*2の計算結果)」を計算⇒「23(5+18の計算結果)-3(6割る2の計算結果)」

算術演算子については学生の時に習った記憶があれば大丈夫と思う。

比較演算子の優先順位

比較演算子は「>、>=、<、<=、==、!=」の6つ。
参考:Javaプログラミング初心者の記録 演算子-比較演算子 Vol.11

この演算子を優先度が高い順番に並べると以下のようになる。

  1. >=<=
  2. ==!=

「==(等しい)」、「!=(等しくない)」を表す演算子は優先度が低いみたい。

 

代入演算子の優先順位

代入演算子は「=、+=、-=、*=、/=、%=」の6つ。

代入演算子については以下参照。
演算子-代入演算子 Vol.12 Javaプログラミング初心者の記録

実は代入演算子は6つすべて同じ優先度
特別先に計算するものはない。

論理演算子の優先順位

論理演算子は「!、&&、||」の3つ。
論理演算子については以下参照。
基本の演算子-論理演算子 Javaプログラミング初心者の記録Vol.13

論理演算子を優先度が高いものから並べると以下のようになる。

  1. !
  2. &&
  3. ||

NOTと否定の意味を持つ「!」がまず優先される。この否定はめちゃくちゃ強い否定。
その次に「&&」と並列の意味があるもの。
最後に「OR」。

否定がめちゃ強(!)、次は欲張り(&&:~と~)、最後はどっちつかずの中途半端(OR)な感じねー(適当)。

インクリメントとデクリメント演算子

インクリメントデクリメント演算子は優先度は同じ。

この二つの演算子の間で優先順位に差はない。

総合的な演算子の優先順位

これまで一つ一つ、それぞれの演算子の種類ごとの優先順位を見てきたが、最後に全部合わせた総合的な演算子の優先順位を見ていく。

  1. ++(論理演算子のNOT、インクリメント演算子、デクリメント演算子)
  2. */(算術演算子)
  3. +(算術演算子)
  4. <><=>=(比較演算子)
  5. ==!=(比較演算子)
  6. &&(論理演算子)
  7. ||(論理演算子)
  8. 代入演算子

順番としてはこんな感じ。
基本的にはインクリメント演算子=デクリメント演算子>算術演算子>比較演算子>論理演算子>代入演算子の順番に優先される。

でも論理演算子の「!」はめっちゃ強い否定の意味。
この否定だけは他の演算子よりも優先される。

NOTはVIP

まとめ

演算子の優先順位について簡単にだけどまとめてみた。

論理演算子の優先順位は他の演算子と比べて低いけれど、NOTだけは優遇されているというか、高い優先度。

英語でもそうだけど、「否定」ってとても強い意味を持つねー。

お次は…今までにちょっとだけ出したし「条件:if-else」構文にしよう。

 

 

このエントリーをはてなブックマークに追加

コメント

タイトルとURLをコピーしました