・p.039「演算子の優先順位一覧」から
p.039 演算子の優先順位一覧
・演算子の優先順位は丸暗記する必要はないが、想定外の優先順位になる可能性を把握しておこう ・優先順位の影響がありそうな(左から右へ進まないような)式ではカッコをつけてそのことを明示するか表記を工夫すると良い ※実務ではルールが決められることが多い 例:a + b * c - d ⇒ a + (b * c) - d ⇒ b * c + a - d
アレンジ演習:p.040,041 Chap1_7_2.cs + Chap1_7_2.cs
・2つ合わせてChap1_7_2.csとして実行し確認しよう ・また、以下の式を追加して、結果を確認しよう 3 / 2.0 - 1.0 3 / 2 - 1.0
作成例
using UnityEngine;
public class Chap1_7_2 : MonoBehaviour {
void Start() {
Debug.Log(2 + 10 + 5); //整数2,10,5の整数加算結果17を得て表示
Debug.Log(2 + 10 * 5); //整数10と5の整数積50と整数2の整数和52
Debug.Log(3 / 2.0 - 1.0); //3÷2.0の実数商1.5から-1.0で0.5
Debug.Log(3 / 2 - 1.0); //3÷2の整数商1から実数-1.0で0.0(表示は0)
}
}
p.042 カッコを使って計算順を変える:補足
・優先順位を誤解しやすい演算子にシフト演算子がある ・シフト演算は値を2進数として扱ってビット単位で左右にずらす仕掛けで、動作が非常に高速なこと、 2のべき乗の乗除算を代用できることから、活用されやすい ・例えば、1ビット左シフトすると2倍になる ① 10進数5は内部では2進数の00000101 ② 1ビット左シフトすると 00001010 となり、これは10進数の10 ・例えば、2ビット右シフトすると1/4になる ① 10進数28は内部では2進数の00011100 ② 2ビット右シフトすると 00000111 となり、これは10進数の7 ・便利だが、加減乗除より優先順位が低いので注意。カッコをつけることを推奨 例: 28 ÷ 4 + 10 ⇒ (28 >> 2) + 10
アレンジ演習:p.042 Chap1_7_3.cs
・以下の式を追加して、結果を確認しよう (28 >> 2) + 10 28 >> 2 + 10
作成例
using UnityEngine;
public class Chap1_7_3 : MonoBehaviour {
void Start() {
Debug.Log((2 + 10) * 5); //整数2と10の整数和と5の整数積⇒60
Debug.Log((28 >> 2) + 10); //28を右2シフト(1/4)して10を加算⇒17
Debug.Log(28 >> 2 + 10); //28を右(2+10)シフト(1/2の12乗)⇒0
}
}
p.042 カッコの中にカッコが入れ子になった式
・ある構造の中に同じ構造があることを「入れ子」という
・C#では、()による入れ子に加えて、{}や[]による入れ子の構造が無制限に利用可
・ただし、読みづらくなることが多いので後述の変数などを用いて、入れ子の数を少なめにすることが望ましい
※ Chap1_7_4.csではカッコの前後の空白の有無が乱れており、開けるか開けないかを決めておくと良い
(実務ではルールが決められることが多い)
例: Debug.Log( 5 / ( 4 * ( 1 - 0.2 ) ) ); //すべて開ける
例: Debug.Log(5 / (4 * (1 - 0.2))); //演算子の前後のみ開ける
p.043 負の数を表す「-」
・数学では負の数を表す「-」は、C#では単項-演算子と呼ばれる演算子 ・単項-演算子は「1つのデータを得て、符号を反転した結果を返す」もの ・よって「-5」なども1つの計算式で「整数5の符号を反転した結果の整数-5を返す」 ・計算式なので、入れ子構造も可能で「-(-5)」とすると 「整数5の符号を反転した結果の整数-5の、符号を反転した結果の整数5を返す」 ・このことは変数の値の符号を反転することに関わるので重要 ・なお、単項-演算子の優先順位は加減乗除より高い ・ちなみに、単項+演算子もあるが意味は「1つのデータを得て、その値を返す」で「+5」も1つの計算式 ・また、引き算の「-」は2つのデータを扱うので2項-演算子と呼ばれ、単項-演算子とは異なる演算子
アレンジ演習:p.042,043 Chap1_7_4.cs + Chap1_7_5.cs
・2つ合わせてChap1_7_5.csとして実行し確認しよう ・また、以下の式を追加して、結果を確認しよう -(-5) -(2 - 10)
作成例
using UnityEngine;
public class Chap1_7_5 : MonoBehaviour {
void Start() {
Debug.Log(5 / (4 * (1 - 0.2))); //⇒1.5625
Debug.Log(2 + 10 * -5); //5の符号を反転し10との積を2に加算⇒-48
Debug.Log(-(-5)); //5の符号を反転した結果の符号を反転⇒5
Debug.Log(-(2 - 10)); //2から10減算した結果の符号を反転⇒8
}
}