「こんにちは、アミーゴ! 論理問題を解くことに夢中になっていたので、あなたが入ってきたことに気づきませんでした。ここであなたに一つ紹介します。ワニが空を飛ぶなら、雪は白いです。空を飛んでいるワニがいます。結論は何ですか?」

「えっと…雪は白いという結論になりますね?」

「素晴らしい! あなたは初級テストに合格しました。次のトピックを習得する準備ができています。それは「論理演算子」と呼ばれています。そして、ブール論理から始めます。本能的に、あなたはすでにそれを知っています。結局のところ、あなたはロボットです. Java 言語に合わせて設定を微調整するだけです。」

「ブール論理?最近ブール型について聞いたのですが…」

「はい、ここには直接的な関係があります。ブール式は true または false のみです。そして偶然にも、この種のロジックはすべて true または false の式、およびそのような式の組み合わせに関するものです。たとえば、式 18 < 25 は常に true、7 < 5 は常に false です。式 (i < 10) は i の値によって異なります。そして、式がたとえば true と評価された場合、プログラムに何かを行うように要求できます。

「ああ、わかりました。ブール式を使用すると、論理的な結論を出すだけでなく、プログラム内でフォークを作成することもできます。」

「その通りです。重要なのは、式の書き方を学ぶことです。たとえば、Java では、単に式 を書くことはできません18 < age <65。これは構文的に間違っており、プログラムはコンパイルできません。

「しかし、次のように書くこともできます。

(18 < age) AND (age < 65)

もちろん、実際には英語という単語は使用しませんAND代わりに、ブール演算子が必要です。つまり、「AND」の表現が異なります。

AND「Java には、 (&&)、OR(||)、NOT(!)の 3 つの論理演算子があります。

幸いことに、括弧を使用すると、複雑な論理式を構築できます。

悪いニュースは、Java 開発者が、およびという単語の代わりにC 言語の表記法を使用することにしたことです。andornot

画面を見てください。

論理演算子 期待 現実
AND (∧) and &&
OR (∨) or ||
NOT ( ̄) not !

「実際はそれほど悪くありません...かなりコンパクトです。ほとんど覚えています。」

「なるほど、それは素晴らしいですね。Java での論理演算子の使用例をいくつか示します。

表現 解釈 説明
(0 < a) && (a < 100) (0 < a) and (a < 100) (0 < a) AND (a < 100)
(!a) && (!b) (not a) and (not b) (NOT a) AND (NOT b)
!(!a || !b) not((not a) or (not b)) NOT((NOT a) OR (NOT b))

比較演算子とブール変数の使用例

「覚えておいてください、アミーゴ、論理式を記述できる場所ならどこでも、論理変数を記述できます。」

"どのようだ?"

「論理式はさまざまな方法で記述できるということです。たとえば、次のようになります。

コード 説明
int age = 35;
if (age >= 18 && age <= 65)
   System.out.println("You can work");
年齢の値が から までの場合1865「働けます」というフレーズが表示されます。
int age = 35;
boolean isYoung = (age < 18);
if (!isYoung && age <= 65)
   System.out.println("You can work");
変数を作成しisYoung、式の最初の部分をその変数に移動しました。単にage >= 18に置き換えただけですage < 18
int age = 35;
boolean isYoung = (age < 18);
boolean isOld = (age > 65);
if (!isYoung && !isOld)
   System.out.println("You can work");
isOld 変数を作成し、式の 2 番目の部分をその変数に移動しました。さらに、age <= 65に置き換えられましたage > 65

if「これら 3 つの例は同等です。2 番目の例でのみ、ステートメントの式の一部を別のブール変数 ( ) に移動しました。3 番目のisYoung例では、式の 2 番目の部分を 2 番目の変数 ( isOld) に移動しました。ちなみに、ブール型変数のデフォルト値は ですfalse

「私はそれを覚えています。願っています。」

論理演算

「それでは、論理演算を簡単に見てみましょう。論理演算は、非常に単純で論理的な (そうでないはずがない!) ルールに従います。

「まず、演算子がどのように機能するかを見てみましょうOR。これは||or disjunctionとも呼ばれます。

表現 結果
true || true true
true || false true
false || true true
false || false false

a || b「表に基づいて式の結果が何になるかを推測できますか?」

"そうか!" 式の値は、true式内の少なくとも 1 つの項が である場合に決まりますtrue。両方が の場合false、結果は になりますfalse

「その通りです。あなたはとても賢いので、表をもう一度見て、それがfalse0 で、trueそれが 1 であると想像してください。そうして見ると、||演算子の動作が通常の算術を思い出させませんか?」

「ええと、それは足し算に少し似ていますが、足し算を行うと、1 + 1 は 1 にはなりません。」

「0 と 1 だけを扱っている場合、それは等しいという感覚があります。しかし、今は気にしないでください。重要なことは、演算と加算の類似性に気づいたことです。これは、次のことを意味します。||」この操作が「論理加算」と呼ばれることが多いという事実には驚かないでください。

"とった。"

「さてAND、 、別名&&接続演算子がステージに登場します。

表現 結果
true && true true
true && false false
false && true false
false && false false

「私が理解しているところによると、式の結果は、true式を構成する両方の値が の場合のみですtrue。それ以外の場合は、常に になりますfalse。」

「よくやった、アミーゴ! あなたはスポンジのようにすべてを吸収しています。算数との類似点が他にもあると思いますか?」

"乗算!"

「その通りです。これで『論理積』が得られます。」

「次に、NOT演算子、別名!、別名論理逆数を見てみましょう。

表現 結果
!true false
!false true

「そうですね、ここではすべてが非常に簡単です。オペレーターがtrueに変わりfalse、その逆も同様です。」

「その通りです。役立つ表現をいくつか紹介します。」

表現 結果
m && !m false
m || !m true
!(a && b) !a || !b
!(a || b) !a && !b