論理演算子を理解する
論理演算子は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となる演算。
関連教材
参考資料
教材データに登録された参考リンクです。リンク先の内容や更新日は提供元でご確認ください。
確認問題の出題・採点や学習履歴の保存にはログインが必要です。