算術・比較・論理演算子の違いと使い分け
演算式は数値を計算する部分、値を比較する部分、複数の条件を結ぶ部分に分けると読みやすくなります。各段階の結果の型と値を確かめ、最後に代入や表示へ渡す値を求めます。
この単元で学ぶこと
- 算術・比較・論理を段階に分ける
- 優先順位と括弧から式の構造を読む
- 式の結果の型に合う代入を判定する
本文解説
目的から演算を選ぶ 在庫が12個で一組5個なら、作れる組数は12/5で2、残る個数は12%5で2です。たまたま同じ値でも意味は別です。在庫が14なら商2、余り4となり違いが現れます。目的が組数か残数かを先に決めます。
境界を含む条件 送料を合計3000円以上で無料にするならtotal>=3000です。total>3000では3000円ちょうどが除外されます。等価比較total==3000はちょうどの場合しか成立せず、3100円を含められません。自然言語の条件を境界値で確認します。
ANDとORの選択 0以上10未満はn>=0&&n<10です。n>=0||n<10では通常のint値はどちらかを満たし、範囲外も通してしまいます。範囲内は両条件、範囲外はn<0||n>=10のように一方成立で表せます。
否定を分配する !(a&&b)は!a||!bと同じ真理値です。!(a||b)は!a&&!bに対応します。両方を満たさないことは、両方とも満たさないこととは違います。a=true,b=falseを入れると前者true、!a&&!bはfalseとなり区別できます。
同じ真理値でも評価が違う boolean a=false;int count=0;a&&++count>0ではcountは0です。a&++count>0ならcountは1です。どちらも論理積の結果falseですが、更新が必要か、安全検査で省略すべきかにより適切な演算子が違います。
値と参照の一致 int a=7,b=7ならa==bで値の一致を調べられます。String a=new String("7"),b=new String("7")ではa==bはfalse、a.equals(b)はtrueです。演算子を見た目だけで統一せず、比較する対象が数値・参照・文字列内容のどれかを選びます。
通常代入と複合代入 byte n=3;n+=2;は必要な型変換を伴って5を格納します。n=n+2;はint結果をbyteへ暗黙縮小できず拒否されます。複合代入は左辺を一度だけ評価する性質もあります。単に記号を短くした全く同じソース置換ではありません。
計算順を明示する 平均を出すなら(double)(a+b)/2とし、整数商を後でdoubleへ変換することと区別します。ただしa+b自体がintであふれる場合は(double)a+b等、加算前の型も考慮します。括弧は計算順、キャストは型を指定し、役割は別です。
図解
重要ポイント
- 算術は数値、比較はboolean、論理はbooleanを組み合わせる。
- 式の結果を代入先の型へ格納できるか確認する。
- 一般に乗除→加減→比較→等価→&&→||の順に強く結び付く。
- 括弧は結び付きを明示する。
間違えやすい点
- 比較結果をintへ代入しない。
- 文字列連結へ切り替わる+を見落とさない。
- 優先順位表だけで副作用の評価順を決めない。
用語解説
- 式
- 値を計算する構文。変数、演算、メソッド呼出し等を組み合わせる。
- 結果の型
- その式が生成する値の型。
- 優先順位
- 複数の演算子の結び付き方を決める規則。
関連教材
参考資料
教材データに登録された参考リンクです。リンク先の内容や更新日は提供元でご確認ください。
確認問題の出題・採点や学習履歴の保存にはログインが必要です。