Javaで「○○かつ××」や「○○または××」のとき□□する、というように論理演算を扱うには論理演算子と呼ばれるものを使う。
このページではJavaの論理演算子についてまとめてご紹介する。初心者の方はぜひ習得しておこう。
Javaの論理演算子と近いもので条件演算子というものもある。「&&」と「||」だ。これも論理演算子と呼ぶことがあり、またこちらの方が有名だし、使われていたりする。
下記で解説しているので、こちらも確認して欲しい。
目次
論理演算とは?
「この条件とこの条件どちらにもマッチしたとき」や「この条件とこの条件のどちらかにマッチしたとき」だけに○○したいというプログラムを書くことはとてもよくある。
例えば自動販売機のプログラムで、「見た目が男性」で「20代」だったら、ホットコーヒーをオススメする、などだ。こういったときに論理演算子を使う。
論理演算、本を読むと大体次のような図で表現がされている。Aという条件とBという条件があったときに、どこまでがYes(True)になって、どこまでがNo(False)になるかだ。
それぞれ確認をしていこう。
Javaの論理演算子の使い方
Javaの論理演算子は、論理演算を行う演算子だ。論理演算は、boolean型の値を演算子のオペランドに与えて論理積や論理和などの演算を行い、結果をboolean型の値として生み出す。
論理演算子にはビット演算子と共通の演算子(&, |, ^)がある。違いは、Boolean値に対して演算するか、それとも数値に対して演算するかである。
まずは、演算子の種類から見ていこう。
演算子の種類
論理演算子には、4つの種類がある。次のセクションでこれらのひとつひとつの演算子の詳細を説明している。
- Boolean論理演算子 &
- Boolean論理演算子 |
- Boolean論理演算子 ^
- 論理補数演算子 !
論理演算子の詳細を見てみよう。
「かつ」を表すBoolean論理演算子 &
演算子「&」は「かつ」を表す。少々難しく言うと論理積だ。&演算子の左と右にあるオペランドのBoolean型の値に対して演算が行われる。
下記でいうと、青い部分のときだけTrueになる。
書き方の基本は簡単だ。
演算結果 = オペランド1 & オペランド2;
オペランド1とオペランド2の論理積の演算結果は次のようになる。
- オペランド1とオペランド2が両方ともtrueならば、演算結果はtrueとなる。
- それ以外はfalseとなる。
項目 |
値 |
|||
オペランド1 |
true |
true |
false |
False |
オペランド2 |
true |
false |
true |
False |
演算結果 |
true |
false |
false |
False |
「または」を表すBoolean論理演算子 |
演算子「|」はBoolean型の値の論理和を求める。論理和とは「または」という意味だ。だから図で表すともっとも広い。条件に当てはまるものだいたい全部。
|演算子の左と右にあるふたつのオペランドのBoolean型の値に対して演算が行われる。
書き方の基本は簡単だ。
演算結果 = オペランド1 | オペランド2;
オペランド1とオペランド2の論理和の演算結果は次のようになる。
- オペランド1とオペランド2のどちらかがtrueならば、演算結果はtrueとなる。
- それ以外はfalseとなる。
項目 |
値 |
|||
オペランド1 |
true |
true |
false |
false |
オペランド2 |
true |
false |
true |
false |
演算結果 |
true |
true |
true |
false |
「結果が異なれば」を表すBoolean論理演算子 ^
演算子「^」はBoolean型の値の排他論理和を求める。^演算子の左と右にあるふたつのオペランドのBoolean型の値に対して演算が行われる。
排他論理和というから言葉が難しい。簡単な日本語に直すと、「1の条件と2の条件の結果が違ければOK」という話だ。「または」から「かつ」の部分を除いた下記の部分がこれに当たる。
書き方の基本は簡単だ。
演算結果 = オペランド1 ^ オペランド2;
オペランド1とオペランド2の排他論理和の演算結果は次のようになる。
- オペランド1とオペランド2の値が異なれば、演算結果はtrueとなる。
- それ以外はfalseとなる。
項目 |
値 |
|||
オペランド1 |
true |
true |
false |
false |
オペランド2 |
true |
false |
true |
false |
演算結果 |
false |
true |
true |
false |
論理補数演算子 !
演算子「!」は補数を求める。!演算子の右にあるオペランドのBoolean型の値に対して演算が行われる。要するに、「否定」とか「逆」を意味する。それ以外、という感じだ。
図で表すと次のようになる。
書き方の基本は簡単だ。
演算結果 = !オペランド;
オペランド1とオペランド2の補数の演算結果は次のようになる。
- オペランドがtrueならば、演算結果はfalseとなる。
- オペランドがfalseならば、演算結果はtrueとなる。
項目 |
値 |
|
オペランド |
true |
false |
演算結果 |
false |
true |
論理演算子のサンプルプログラム
このサンプルプログラムは、演算子の最初のオペランドがtrueで2番目のオペランドがfalseのとき、3種類の論理演算子はどのような演算結果を出すのかを示している。実際のコードで書き方と演算結果を確かめよう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
public class LogicalOperators { public static void main (String[] args) { boolean valueTrue = true;//[1] boolean valueFalse = false;//[2] boolean result;//[3] result = valueTrue & valueFalse;//[4] System.out.println("[5] true & false = " + result); result = valueTrue | valueFalse;//[6] System.out.println("[7] true | false = " + result); result = valueTrue ^ valueFalse;//[8] System.out.println("[9] true ^ false = " + result); result = ! valueTrue;//[10] System.out.println("[11]! valueTrue = " + result); result = ! valueFalse;//[12] System.out.println("[13]! valueFalse = " + result); } } |
実行結果
1 2 3 4 5 |
[5] true & false = false [7] true | false = true [9] true ^ false = true [11]! valueTrue = false [13]! valueFalse = true |
なんとなくお分かりいただけただろうか?
これだけだとわかりにくいかもしれないが、if文などで条件を分岐していくプログラムを書いたとき、よく理解できるようになるだろう。
また、上でも書いたが、実際には「&&」や「||」の条件演算子(論理演算子)の方がよく見る。下記も確認しておいて欲しい。
まとめ
このページでは論理演算子についてまとめてお伝えをしてきた。いずれもよく使うので、使い方含め覚えてしまおう。