p.94 代入演算子:複合代入演算子
・2項=演算子を代入演算子といい、基本的に左辺が変数であることが特徴 ・インクリメント演算子と同様に「変数に●を加算する」ような処理は頻出なので、複合代入演算子が提供されている ・複合代入演算子とは「変数 = 変数 演算子 式や値」を「変数 演算子= 式や値」と略記できる仕組み ・例: a = a + 2 ⇒ a += 2 //aに2を足しこむ ・例: a = a - 2 ⇒ a -= 2 //aから2を差し引く ・ちなみに、「++a」は「a += 1」と同じ結果になる ・複合代入演算子としては、算術演算の+=、-=、*=、/=、%=に加えて、論理演算の&=、|=、^=と、シフト演算の<<=、>>=が提供されている
ミニ演習 mini095.cs
・コンソールから西暦4桁を入力すると、下2桁にしてから、表示するようにしよう 例: 1962 ⇒ 62にする ・入力した変数の値を複合代入演算子で操作すること
作成例
//ミニ演習 mini095.cs
using System;
class mini088a
{
public static void Main()
{
Console.Write("西暦4桁 : ");
int a = int.Parse(Console.ReadLine());
a %= 100; //aを100で割った余りにする=下2桁にする
Console.WriteLine("西暦下2桁 : " + a);
}
}
p.95 代入演算子:暗黙の型変換
・扱える範囲が広い型のことを「大きい型」といい、扱える範囲がこの範囲内に収まる型は「小さい型」という ・大きい型の変数に小さい型の式や値を代入すると、代入前に大きい型への変換が自動的に行われる ・このことを暗黙の型変換(拡大変換)という 例: int i = 10; long j = i; //iの値10をlong型に暗黙の型変換する ・ただし、decimal型への暗黙の型変換はできるが、decimal型からの暗黙の型変換はエラーになる ・また、byte型とsbyte型は、両方向共に変換できないので、キャストを用いる必要がある
アレンジ演習:p.96 convert01.cs
・byte型とsbyte型は、両方向共に変換できないが、キャストを用いると可能なことを確認しよう
作成例
//p.96 convert01.cs
using System;
class convert01
{
public static void Main()
{
byte a = 10;
sbyte b;
ushort c;
short d;
uint e;
int f;
ulong g;
long h;
float i;
double j;
decimal k;
b = (sbyte)a; //byteをsbyteには変換できないがキャストすれば可能
b = 10;
a = (byte)b; //sbyteをbyteには変換できないがキャストすれば可能
c = a;
d = a;
e = a;
f = a;
g = a;
h = a;
i = a;
j = a;
k = a;
}
}
p.97 演算子の優先順位
・加減算よりも乗除算が優先されるように、C#によって演算子の優先順位が定められている ※代入演算子が最下位であること以外は丸暗記は不用 ・なお、演算子の優先順位に依存するプログラミングは避けるべきで、できるだけ左から順に計算されるように書き換えておくか、 カッコで優先順位を示すと良い 例: a + b * c ⇒ b * c + a あるいは a + (b * c) ・なお、演算順序を変える場合、途中での型変換が変わる場合があるので注意 ・表4.3の優先順位にある「.」「f(x)」「a[x]」「new」などは後述
p.98 演算子の結合規則
・同じ優先度の演算子が複数並んで用いられる場合、評価は左から順に行う。これを左結合という。 ・多くの演算子は左結合だが、逆に右から行う右結合もあるので注意 ・その代表例が代入演算子で、右結合を活かすと「a = b = c = 10」のような連続同値代入ができる。 ・実は、この式は下記のように評価される ① a = b = (c = 10) //変数cに10が代入され評価は代入値の10 ② a = (b = 10) //変数bに10が代入され評価は代入値の10 ③ a = 10 ・ただし、a、b、cの型が異なる場合、途中で起こる型変換の影響に注意すること
ミニ演習 mini098.cs
・double型の変数a、cと、int型の変数bがあるとき、下記の実行後の値に差が出るか確認しよう ① a = b = c = 3.14; ② a = c = b = 3.14; ※ 必要に応じてキャストを行うこと
提出:ミニ演習 mini098.cs