論理演算子を理解する

論理演算子はbooleanの条件を組み合わせます。両方必要か、一方で十分か、否定したいかを決め、右側が実行される条件まで読み解きます。

この単元で学ぶこと

  • AND・OR・NOTの真偽を求める
  • 短絡評価による実行の有無を追う
  • boolean演算と整数演算を区別する

本文解説

条件を二つ結ぶ boolean adult=true,ticket=false;でadult&&ticketはfalseです。両条件を満たす必要があります。adult||ticketなら片方がtrueなのでtrueです。入場に年齢と券の両方が必要なのか、どちらか一方でよいのかを式で区別します。

NOTで否定する !trueはfalse、!falseはtrueです。int n=5;!(n>0)ならfalseになります。nが正でないかを調べています。!n>0はintに!を適用しようとしてエラーです。否定するboolean式を括弧で囲みます。

ANDの短絡 int n=0;boolean ok=n!=0&&10/n>2;では左falseにより右を評価せずfalseです。除数0の式が書かれていても評価されないので例外は出ません。逆に10/n>2&&n!=0では安全確認より先に除算を行って例外です。

ORの短絡 String s=null;boolean empty=s==null||s.length()==0;なら左trueで右を省略しtrueです。nullまたは空文字を判定できます。sが"x"なら左falseのため右を評価してfalseです。ORがいつも右を省くわけではありません。

短絡しない論理演算 booleanへ&や|を使うと両辺を評価します。false&10/0>0は右も計算して例外です。&&や||とは真理値表が同じでも実行される処理が違います。安全検査や更新処理が含まれる場合、置換すると動作が変わります。

排他的論理和 true^falseはtrue、true^trueはfalseです。二条件が異なる場合だけ成立します。どちらか一つだけ選ばれたかを表せます。booleanの^は短絡せず両辺を評価し、||のように両方trueをtrueとはしません。

優先順位 !は&&より強く、&&は||より強く結び付きます。true||false&&falseはtrue||(false&&false)でtrueです。(true||false)&&falseならfalseになります。条件が長い場合は括弧で意味を明示すると誤解を減らせます。

booleanとビット演算 5&3は整数のビットごとのANDで1です。一方true&falseはbooleanのANDでfalseです。5&&3は不正で、&&の両辺はbooleanでなければなりません。演算子だけでなくオペランドの型も確認します。

図解

右側へ進む条件
真理値が同じでも評価される処理は違うことがある。

重要ポイント

  • &&は両条件がtrueの場合だけtrue。
  • ||は少なくとも一方がtrueならtrue。
  • !はbooleanを反転する。
  • &と|もbooleanに使えるが右側を必ず評価する。

間違えやすい点

  • &&と&を副作用のある式で同一視しない。
  • NOTを条件全体へ適用するときの括弧を忘れない。
  • 論理式へ整数をそのまま渡さない。

用語解説

論理積
両方がtrueのときだけtrueとなる結合。
論理和
少なくとも一方がtrueならtrueとなる結合。
短絡評価
左の値だけで結果が決まった場合に右を評価しない規則。
排他的論理和
二つのbooleanの値が異なる場合だけtrueとなる演算。

関連教材

参考資料

教材データに登録された参考リンクです。リンク先の内容や更新日は提供元でご確認ください。

確認問題の出題・採点や学習履歴の保存にはログインが必要です。