講義メモ

・p.90「短絡評価」のプログラム例から

p.90(短絡評価)【再掲載】

・2項&&演算子と2項||演算子のもつ、途中で結果が確定したときは先に進むという特長のこと
・これにより、無駄な動作の除外が可能
・例:「多くの計算① && 多くの計算②」とすると、多くの計算①がfalseなら②は実行せずにfalse確定
・例:「多くの計算① || 多くの計算②」とすると、多くの計算①がtrueなら②は実行せずにtrue確定
・これにより、異常終了の回避が可能
・例:「a != 0 && 5 / a > 2」とすると、もしもaが0だと「5 / a」は異常終了するが、
 「a != 0」がfalseになるので「5 / a」は実行されない=異常終了の回避が可能

ミニ演習 mini090.cs

・int型の値を入力して「100 / 入力値」が50超かを表示するプログラムを作成しよう
・まず、短絡評価を用いないと0が入力されたときに、異常終了することを確認しよう
 例: if (100 / n > 50) {…}
・それから、短絡評価を用いて0が入力されたときに、異常終了しないことを確認しよう
 例: if (n != 0 && 100 / n > 50) {…}

作成例

//ミニ演習 mini090.cs
using System;
class mini090
{
    public static void Main()
    {
        Console.Write("整数n:"); int n = int.Parse(Console.ReadLine()); 
        if (n != 0 && 100 / n > 50) { //短絡評価でnが0ではない時のみ除算するから異常終了しない
            Console.WriteLine("100÷nは50超です");
        }
    }
}

p.90 bitwise01.cs

//p.90 bitwise01.cs
using System;
class bitwise01
{
    public static void Main()
    {
        byte a = 2, b = 3; //2進数4桁にすると 2⇒0010 3⇒0011
        Console.WriteLine(a & b); // 0010 & 0011 = 0010 となり10進数の2
        Console.WriteLine(a | b); // 0010 | 0011 = 0011 となり10進数の3
        Console.WriteLine(a ^ b); // 0010 ^ 0011 = 0001 となり10進数の1
        Console.WriteLine(); //改行
        bool x = true, y = false; //trueは2進数の1、falseは2進数の0
        Console.WriteLine(x & x); //1 & 1 = 1 ⇒ True
        Console.WriteLine(x & y); //1 & 0 = 0 ⇒ False
        Console.WriteLine(y & y); //0 & 0 = 0 ⇒ False
        Console.WriteLine(); //改行
        Console.WriteLine(x | x); //1 | 1 = 1 ⇒ True
        Console.WriteLine(x | y); //1 | 0 = 1 ⇒ True
        Console.WriteLine(y | y); //0 & 0 = 0 ⇒ False
        Console.WriteLine(); //改行
        Console.WriteLine(x ^ x); //1 ^ 1 = 0 ⇒ False
        Console.WriteLine(x ^ y); //1 ^ 0 = 1 ⇒ True
        Console.WriteLine(y ^ y); //0 ^ 0 = 0 ⇒ False
    }
}

p.94 代入演算子(及び複合代入演算子)

・代入の「=」記号は、実は2項=演算子で、優先度が低いが用途のバリエーションは多い
・主に四則演算と代入の組み合わせで「● = ● 演算子 式や値」となる場合に、簡略記述に用いられるのが複合代入演算子で、
 「● 演算子= 式や値」とできる。
・例: x = x + 10; ⇒ x += 10、y = y * 5; ⇒ y *= 5;

p.94 代入演算子(暗黙の型変換)

・同種だが型が異なる変数などへの代入では、左辺より、右辺の対象範囲が広い場合、暗黙の型変換を起こり、問題なく代入される
 例: short s = 5; int i; i = s; //暗黙の型変換が起こり、int型に拡大変換されたsがiに代入される
・拡大変換を丸暗記する必要はないが、実数型から整数型へは不可で、整数型から実数型へは基本的に可能。

p.97 演算子の優先順位

・演算子の優先順位は丸暗記の必要はなく、優先順位が特殊な式ではカッコで優先度を明示すると良い
・なお、代入演算子、複合代入演算子が優先順位最下位であることは意識しておくと良い

p.97 演算子の結合規則

・同じ優先度の演算子が複数並ぶ場合、基本的には左から評価する。これを「左から右への結合」という
 ※ C/C++では「左結合」という
・一部の演算子では「右から左への結合」があり、最も有名なのは代入演算子。
 例: a = b = 5; //5をbに代入し、その評価値である5をaに代入(結果的にaとbに5を代入したことになる)
  つまり「a = (b = 5);」と同じ意味。

※ p.100 練習問題は自由参加課題とします

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です