講義メモ 後半

p.37 整数と実数

・コンピュータ内では整数と実数は別扱いになっている
・小数点がない数字列(先頭のみ「-」可能)は整数とみなされる
・小数点が1つだけある数字列(先頭のみ「-」可能)は実数とみなされる
・加減乗算では、左右どちらかまたは両方が実数だと結果は実数になる(計算手順は同じ)
・除算では、左右どちらかまたは両方が実数だと実数計算に、でなければ整数計算になり小数点以下切り捨ての整数になる
・剰余算における実数の扱いは言語や処理系で異なるが、C#では実数を含むことが可能
 ※誤差が出ることが多いので扱いは注意(誤差を避けるには整数化して行うと良い)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Chap1_6_3 : MonoBehaviour {
    void Start() {
        Debug.Log( 2 + 0.5 ); //式2+0.5の評価(実数加算結果)を出力
    }
    void Update() {
        
    }
}

アレンジ演習:Chap1_6_3

・実数と実数の加算で小数点以下がゼロの場合の結果を確認しよう
・整数と実数の剰余算の結果を確認しよう

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Chap1_6_3 : MonoBehaviour {
    void Start() {
        Debug.Log( 2 + 0.5 );    //整数と実数の加算結果を出力→2.5
        Debug.Log( 2.5 + 0.5 );  //実数と実数の加算結果を出力→3(表示で整数化)
        Debug.Log( 10 % 0.3 );   //整数と実数の剰余算結果を出力→0.1
        Debug.Log( 10.3 % 2 );   //実数と整数の剰余算結果を出力→0.3000…01
        Debug.Log( 10.1 % 2.5 ); //実数と実数の剰余算結果)を出力→0.09999…96
    }
    void Update() {
        
    }
}

p.37 補足:ゼロ除算

・0で割った場合の結果は言語や処理系に依存する
・C#の場合、整数を明示的に0で割るとコンパイルエラーとなり実行できない
・なお、右辺が式であっても評価結果が明示的に0になる場合も同様
・実数を0で割ったり、実数の0.0で割ることは可能だが…
・また、負の実数を0で割ると…
・ちなみに、後述する変数の利用時には結果が異なる

アレンジ演習:Chap1_6_3

・実数を0で割ったり、実数の0.0で割った場合の結果を確認しよう
・負の実数を0で割った場合の結果を確認しよう

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Chap1_6_3 : MonoBehaviour {
    void Start() {
        Debug.Log( 2 + 0.5 );    //整数と実数の加算結果を出力→2.5
        Debug.Log( 2.5 + 0.5 );  //実数と実数の加算結果を出力→3(表示で整数化)
        Debug.Log( 10 % 0.3 );   //整数と実数の剰余算結果を出力→0.1
        Debug.Log( 10.3 % 2 );   //実数と整数の剰余算結果を出力→0.3000…01
        Debug.Log( 10.1 % 2.5 ); //実数と実数の剰余算結果)を出力→0.09999…96
        Debug.Log( 10.0 / 0 );   //実数をゼロで割った結果を出力→ Infinity
        Debug.Log( 10 / 0.0 );   //ゼロを実数で割った結果を出力→ Infinity
        Debug.Log( -1 / 0.0 );   //負の実数をゼロで割った結果を出力→ -Infinity
    }
    void Update() {
        
    }
}

p.38 長い数式を入力する

・演算子には優先順位があるが、これを暗記するのではなく、左から右への順にならない場合はカッコで示すことが
 推奨されている
・例:加減算より乗除算が優先なので 1 + 2 * 3 → 7 だが 1 + (2 * 3) とするのが望ましい
・剰余残は除算と同じ優先度だが間違いやすいので注意

p.39 演算子の優先順位一覧

・f(x):メソッドの呼び出しのことで、例えば Debug.Log(1) が該当し、優先順位1位だが、カッコ内に式がある
 場合は、その式の方が優先
・x++:p.105参照。インクリメントと呼び「1加算した結果にする」
・x--:p.108参照。デクリメントと呼び「1減算した結果にする」
・-x:値を負の数にする。実は「-5」は整数5の前に単項-演算子をつけて負の数にしたもの
・++x:前置増分演算子といい、インクリメントの一種で「まず1加算してから」
・--x:前置減分演算子といい、デクリメントの一種で「まず1減算してから」
・(T)x:p.57参照。キャスト演算子といい、例えば整数を実数に変換する場合などに用いる
・x << y:左シフト演算子といい。xを2進数にしてy桁分だけ左にずらし、空きを0で埋めた結果を返す。
 1左シフトすると2倍になるので2のべき乗倍の高速化に用いる。
・x >> y:右シフト演算子といい。xを2進数にしてy桁分だけ右にずらし、空きを0で埋めた結果を返す。
 1右シフトすると半分になるので2のべき乗分の1の高速化に用いる。
・論理AND/OR/XOR:p.56で説明するbool型に用いる論理演算子。
 ※ C言語では0/非0で論理演算を代替できるが、C#では禁止になっている

アレンジ演習:Chap1_6_3

・上辺が10、下辺が21、高さが3の台形の面積を実数で出力しよう

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Chap1_6_3 : MonoBehaviour {
    void Start() {
        Debug.Log( 2 + 0.5 );    //整数と実数の加算結果を出力→2.5
        Debug.Log( 2.5 + 0.5 );  //実数と実数の加算結果を出力→3(表示で整数化)
        Debug.Log( 10 % 0.3 );   //整数と実数の剰余算結果を出力→0.1
        Debug.Log( 10.3 % 2 );   //実数と整数の剰余算結果を出力→0.3000…01
        Debug.Log( 10.1 % 2.5 ); //実数と実数の剰余算結果)を出力→0.09999…96
        Debug.Log( 10.0 / 0 );   //実数をゼロで割った結果を出力→ Infinity
        Debug.Log( 10 / 0.0 );   //ゼロを実数で割った結果を出力→ Infinity
        Debug.Log( -1 / 0.0 );   //負の実数をゼロで割った結果を出力→ -Infinity
        Debug.Log( (10 + 21) * 3 / 2.0 ); //上辺10下辺21高さ3の台形の面積を実数で
    }
    void Update() {
        
    }
}

p.40 同じ優先順位の演算子を組み合わせた式

・複数の演算子を含む式は、演算子が(基本的に左から)1つずつ評価され、途中経過の値がその型に応じた形で
 保持される
・この時の型を意識して式を書く必要がある
・例「2 + 10.5 + 5.5」は整数+実数で実数の12.5が途中経過になる
・例「2.5 + 10.5 + 5.5」は実数+実数で実数の13.0が途中経過になる(整数になるわけではない)

p.41 優先順位が異なる演算子を組み合わせた式

・優先順位に応じた順序で演算子が1つずつ評価され、途中経過の値がその型に応じた形で保持される

p.42 カッコの中にカッコが入れ子になった式

・優先順位を示すカッコはいくつでも何重にでも指定可能
・見づらくなる場合は、式を分割するなどの工夫が望ましい(変数を用いるので後述)

p.43 負の数を表す「-」

・演算子は対象の数により単項演算子、2項演算子、3項演算子があり、同じ記号で意味が異なるものや、
 対象の型により動作が異なるものがある
・2項-演算子は「左辺から右辺を引いた結果を返す」例:3-4 ⇒ -1を返す
・単項-演算子は「符号を反転した結果を返す」例:-(-4) ⇒ 4を返す
・なお、単項+演算子は実質的に何もしない

提出:アレンジ演習:Chap1_6_3

コメントを残す

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