こんばにちは、ユウです。
今回は代入演算子について解説していきます。
代入演算子は使用頻度が高いのでしっかりと覚えておきましょう。
本記事の内容
☑代入演算子の種類について
☑演算子の優先順位について
代入演算子
代入演算子(assignment operator)は「=」です。
これは今までも使っていたので、わかっているかと思いますが、
変数 = 式;
とすることで、式の値を変数に代入します。
これは単純な「=」の他にも、複合代入演算子(compound assignment operator)というものがあります。
これは、
x = x +10;
を
x += 10;
と表現することができます。
この書き方は簡潔に書くことができるので使用頻度が高いです。
ですので、この使い方は覚えておくようにしてください。
複合代入演算子は「+=」のほかにも次らのものがあります。
-= /= %= &= |= ^= <<= >>=
代入に対して覚えておかないといけない事があります。
原則として、代入演算子の左右のオペランドは同じ型でなければいけません。
しかし、小さな型から大きな型へは問題なく代入できます。
これを暗黙の型変換(implicit type)と言います。
byte a =5;
int b;
b = a;
この場合aとbは型が異なりますが、int型はbyte型のすべての範囲で含んでいるので問題がないことがわかります。
これを拡大変換(widening conversion)といいます。
拡大変換は次の表を示します。
元の型 | 拡大変換が可能な型 |
Byte(byte) | Uint16(ushort),Int16(short),Uint32(uint), Int32(int),Uint64(ulong),Int64(long), Single(float),Double(double), Decimal(decimal) |
SByte(sbyte) | Int16,Int32,Int64,Single,Double,Decimal |
Int16 | Int32,Int64,Single,Double,Decimal |
Uint16 | Uint32,Int32,Uint64,Int64,Single,Double, Decimal |
Char | Uint16,Uint32,Int32,Uint64,Int64, Single,Double,Decimal |
Int32 | Int64,Double,Decimal |
UInt32 | Int64,Double,Decimal |
Int64 | Decimal |
UInt64 | Decimal |
Single | Decimal |
この表はそこまで覚える必要はなく、コンパイル時に暗黙の変換ができない場合は教えてくれます。
それでは、コードを書いていきましょう。
演算子の優先順位と結合規則
演算子には優先順位が存在します。
x = a + b * c;
とあれば、まず「b*c」が評価されます。これをdとおくと次に「a + d」が評価されます。そしてこれをeとし最後に「x = e」が評価されます。
この式では優先順位は、
* → + → =
の順になっていることがわかります。
その他の演算子も含めた優先順位を表にまとめますが、暗記する必要も全くありません。
不安に感じたら先に評価してほしい部分をかっこでくくってもらえれば意図通りの演算を行えます。
順位 | 種類 | 演算子 |
1 | 1次式 | x.y f(x) a[x] x++ x– new typeof checked unchecked |
2 | 単項式 | + - ! ~ ++x –x (T)x |
3 | 乗法式 | * / % |
4 | 加法式 | + - |
5 | シフト | << >> |
6 | 関係式 | < > <= >= is as |
7 | 等価式 | == != |
8 | 論理 | & |
9 | 論理 | ^ |
10 | 論理 | | |
11 | 条件 | && |
12 | 条件 | || |
13 | 条件 | ?: |
14 | 代入 | = *= /= %= += -= <<= >>= &= ^= != |
演算子の結合規則
同じ優先順位にある演算子は結合規則に従います。
a = b + c -d;
という式で考えてみましょう。
+ と – は優先順位が等しいのでこの場合は、
a = (b + c) -d;
と考えるのが妥当です。(b+c)が結合されたと見なされます。この値をeとすると、
a = (e – d);
となります。
結合は左から右に進みました。これを左から右への結合といい、右向きの矢印(→)で表したりします。
代入演算子と条件演算子(?:)を除くすべての2項演算子は左から右への結合であると覚えておくようにしましょう。
次に、
a = b = c = d;
という式について考えてみましょう。
代入演算子は右から左への結合(←)なので
a = b = ( c = d );
「c = d」を「e」とすると、
a = (b = e);
「b = e」を「f」とすると、
(a = f);
となります。
最後に
今回は代入演算子について紹介してきました。
代入演算子についてはしっかりと覚えておく必要はありませんが、C#はこんな風に動いているのだという認識をしておく必要があります。
今回はこれで以上となります。
最後まで読んでいただきありがとうございました!