Javaの基礎文法 論理演算(2-10)

記事上広告

論理演算は複雑な条件を組み立てたい場合に利用する演算で、「AとBの条件がどちらも当てはまる」「AかBの条件で一方でも当てはまっている場合」などの条件を作成したいときに利用します。

論理演算は比較演算と同様に処理結果がtrueかfalseになります。

論理演算の種類

論理演算には「AND演算」「OR演算」「XOR演算」「NOT演算」があります。

NOT演算以外の演算では、左右の被演算子はtrueかfalseのいずれかになる必要があります。
(NOT演算は左のみに被演算子がある)

それぞれの演算子は以下のようになります。

演算の種類 演算子 記述例 説明
AND演算 && x > 0 && x < 11 &&の右と左の両方がtrueの場合のみtrueになる
OR演算 || x == 3 || y == 5 ||の右か左の一方がtrueの場合にtrueになる
XOR演算 ^ x == 3 ^ y == 5 ^の右と左の片方がtrueの場合のみtrueになる
NOT演算 ! !(x == 1) trueはfalseに、falseはtrueになる

各種論理演算子の説明

AND演算

x > 0 && x < 11

「xが0より大きい」かつ「xが11より小さい」となっている。

AND演算は両方の条件(今回は比較演算)でtrueになる場合のみtrueになる為、斜線部分が当てはまる部分になります。
※「0から11(0と11は含まない)」の範囲であればtrueとなる

以下はAND演算時、左右の被演算子の結果の組み合わせによってAND演算後の結果がどのような結果になるかを表にしたものです。

AND演算
左側の条件結果 右側の条件結果 AND演算後の結果
true true true
true false false
false true false
false false false

OR演算

x == 3 || y == 5

「xが3と等しい」もしくは「yが5と等しい」となっている。

OR演算は一方の条件(今回は比較演算)がtrueであればtrueになる為、丸の部分が当てはまる部分になります。

xが3であればyは5でなくてもtrue。また、yが5であればxは3でなくてもtrueとなります。xが3でyが5の場合もtrueです。

以下はOR演算時、左右の被演算子の結果の組み合わせによってOR演算後の結果がどのような結果になるかを表にしたものです。

OR演算
左側の条件結果 右側の条件結果 OR演算後の結果
true true true
true false true
false true true
false false false

XOR演算

x == 3 ^ y == 5

「xが3と等しい」もしくは「yが5と等しい」となっている。

XOR演算は一方の条件(今回は比較演算)のみtrueであればtrueになる為、丸の部分が当てはまる部分になります。一見、OR演算と同じですが以下の部分が変わります。

xが3の場合、yは5でなければtrue。また、yが5の場合、xは3でなければtrueとなります。つまり、XORではxが3でyが5の場合はfalseとなります。

以下はXOR演算時、左右の被演算子の結果の組み合わせによってXOR演算後の結果がどのような結果になるかを表にしたものです。

XOR演算
左側の条件結果 右側の条件結果 XOR演算後の結果
true true false
true false true
false true true
false false false

NOT演算

!(x == 1)

「xが1と等しいを否定」となっている。つまり、xが1と等しくないことを指しています。

NOT演算はtrueをfalseに、falseをtrueに反転させる為、斜線が当てはまる部分になります。

xが1の時はtrueになりますがNOT演算で反転しfalseに、xが1でない時はfalseになりますがNOT演算で反転しtrueとなります。

以下はNOT演算時後の結果がどのような結果になるかを表にしたものです。

NOT演算
対象となる条件結果 NOT演算後の結果
true false
false true

論理演算 サンプルプログラム

以下のプログラムを「Number10.java」という名前でworkフォルダ内に保存します。
保存が完了したら、コマンドプロンプトを起動し、コンパイルおよび実行を行ってみましょう。

実行例

c:\work>javac Number10.java

c:\work>java Number10
x > 0 && x < 11
true
x == 3 || y == 5
true
x == 3 ^ y == 5
false
!(x == 1)
true

※実行例はコンパイルから実行までの例を表示しています。

補足説明

AND演算とOR演算にはそれぞれ2つの種類があります。

演算の種類 演算子 記述例 演算説明
AND演算 && x > 0 && x < 11 演算子の右左の両方がtrueの場合のみtrueになる
& x > 0 & x < 11
OR演算 || x == 3 || y == 5 演算子の右左の一方がtrueの場合にtrueになる
| x == 3 | y == 5

&&と&、||と|の違いは、左の被演算子(式)の結果により右の被演算子(式)の実行がするかどうかが決まります。

例えば、次のようなAND演算があります。

int x1 = 0 ;
boolean b1 = x1 > 0 && ++x1 < 11 ;
System.out.println(b1);
System.out.println(x1);

int x2 = 0;
boolean b2 = x2 > 0 & ++x2 < 11 ;
System.out.println(b2);
System.out.println(x2);

上記のb1とb2の結果は変わりません。しかし、x1とx2では違う結果となります。

AND演算はどちらもtrueの時のみtrueとなる為、どちらか一方でもfalseの場合はfalseが確定されます。
論理演算では左の式実行後に右の式を実行しますが、&&を利用したAND演算では左の式がfalseだった場合は右を実行しなくともfalseが確定する為、右の式を実行しないという特性があります。この動きは短絡評価(ショートサーキット)と表現されます。

&は短絡評価は行わないので、左の式の結果にかかわらず必ず右の式も実行します。

x1 > 0 && ++x1 < 11 の式ではx1に0が代入されており左の式がfalseになり、右の式が実行されません。
右の式のインクリメントは動作しませんので、x1は0のままとなります。

x2 > 0 & ++x2 < 11 の式ではx2に0が代入されており左の式がfalseになりますが、右の式は実行されます。
右の式のインクリメントが動作し、x2は1に変わります。

次はOR演算です。

int x3 = 0 ;
boolean b3 = x3 >= 0 || ++x3 < 11 ;
System.out.println(b3);
System.out.println(x3);

int x4 = 0;
boolean b4 =x4 >= 0 | ++x4 < 11 ;
System.out.println(b4);
System.out.println(x4);

上記のb3とb4の結果はAND演算同様変わりません。しかし、x3とx4では違う結果となります。

OR演算はどちらか一方でもtrueの場合はtrueとなる為、片方でもtrueの場合はtrueが確定されます。
論理演算では左の式実行後に右の式を実行しますが、||を利用したOR演算では左の式がtrueだった場合は右を実行しなくともtrueが確定する為、右の式を実行しないという特性があります。この動きは前述した短絡評価(ショートサーキット)と呼ばれる動作です。

|は短絡評価は行わないので、左の式の結果にかかわらず必ず右の式も実行します。

x3 >= 0 || ++x3 < 11 の式ではx3に0が代入されており左の式がtrueになり、右の式が実行されません。
右の式のインクリメントは動作しませんので、x3は0のままとなります。

x4 >= 0 | ++x4 < 11 の式ではx4に0が代入されており左の式がtrueになりますが、右の式は実行されます。
右の式のインクリメントが動作し、x4は1に変わります。

論理演算 サンプルプログラム

Number10.java」のプログラムを以下のように変更してworkフォルダ内に保存します。
保存が完了したら、コマンドプロンプトを起動し、コンパイルおよび実行を行ってみましょう。

実行例

c:\work>javac Number10.java

c:\work>java Number10
x > 0 && x < 11
true
x == 3 || y == 5
true
x == 3 ^ y == 5
false
!(x == 1)
true
false
0
false
1
true
0
true
1

※実行例はコンパイルから実行までの例を表示しています。

まとめ

  • 論理演算を利用すると様々な条件を作成することができる
  • AND演算」は右と左の被演算子が両方trueの時のみtrue
  • OR演算」は右か左の被演算子が片方でもtrueの時にtrue
  • XOR演算」は右か左の被演算子がtrueの時のみtrue
  • NOT演算」は被演算子を否定して、trueはfalseに、falseはtrueとなる
  • &&と||は短絡評価となり、左側の被演算子により右側の式(被演算子)を実行しないことがある
参加 ブログランキング

記事頑張って書いたかもねー?と思う方は下を押してもらえるといいかなーなんて
にほんブログ村 IT技術ブログへ
にほんブログ村


Javaランキング

目次へのアクセス
スポンサーリンク
レクタングル

シェアする

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

フォローする

スポンサーリンク
レクタングル