「こんにちは、アミーゴ! 論理問題を解くことに夢中になっていたので、あなたが入ってきたことに気づきませんでした。ここであなたに一つ紹介します。ワニが空を飛ぶなら、雪は白いです。空を飛んでいるワニがいます。結論は何ですか?」
「えっと…雪は白いという結論になりますね?」
「素晴らしい! あなたは初級テストに合格しました。次のトピックを習得する準備ができています。それは「論理演算子」と呼ばれています。そして、ブール論理から始めます。本能的に、あなたはすでにそれを知っています。結局のところ、あなたはロボットです. 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 言語の表記法を使用することにしたことです。and
or
not
画面を見てください。
論理演算子 | 期待 | 現実 |
---|---|---|
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)) |
比較演算子とブール変数の使用例
「覚えておいてください、アミーゴ、論理式を記述できる場所ならどこでも、論理変数を記述できます。」
"どのようだ?"
「論理式はさまざまな方法で記述できるということです。たとえば、次のようになります。
コード | 説明 |
---|---|
|
年齢の値が から までの場合18 、65 「働けます」というフレーズが表示されます。 |
|
変数を作成しisYoung 、式の最初の部分をその変数に移動しました。単にage >= 18 に置き換えただけですage < 18 。 |
|
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
。
「その通りです。あなたはとても賢いので、表をもう一度見て、それがfalse
0 で、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 |
GO TO FULL VERSION