演算子についての重要な点は以下になります。
- 多く式は演算子とオペランドで構成されている
- 「+」演算子は数字の加算だけでなく、文字列を連結することも
- インクリメント演算子を使うことで、変数の値を 1 加算できる デクリメントも同様
- 複合的代入演算子で、四則演算と代入を簡単にできる
- キャスト演算子を使ってサイズが小さい型の変数に、サイズが大きい型の値を代入できる
変数の計算、入力値を利用して処理内容を変更したりという処理を行う場合に、必要となる機能が演算です。
演算をするための記号を演算子と呼びます。
ここでは、演算子の種類と使い方について解説していきます。
演算子の基本と種類
計算などの処理を行う場合には、演算子を使用します。
演算子は 1 個以上の情報に対して演算処理を行います。
このとき、演算の対象となる情報をオペランドと言います。
1 つのオペランドに対して使用する演算子を単項演算子と呼び、オペランドが 2 つ必要なものを 2 項演算子、3 つ必要なものを 3 項演算子と呼びます。
■演算子の種類
種類が多いので、代表的な算術演算子と代入演算子、複合代入演算子をメインで解説していきたいと思います。
種類 | 記号 | オペランド数 | 概要 |
代入演算子 | = | 2項演算子 | 代入 |
算術演算子 | + | 単項演算子 | 符号 |
〃 | – | 単項〃算子 | 符号の反転 |
〃 | ++ | 単項演算子 | インクリメント |
〃 | — | 単項演算子 | デクリメント |
〃 | + | 2項演算子 | 加算、文字列連結 |
〃 | – | 2項演算子 | 減算 |
〃 | * | 2項演算子 | 乗算 |
〃 | / | 2項演算子 | 除算 |
〃 | % | 2項演算子 | 剰余 |
比較演算子 | > | 2項演算子 | 左辺は右辺より大きい |
〃 | >= | 2項演算子 | 左辺は右辺以上 |
〃 | < | 2項演算子 | 左辺は右辺より小さい |
〃 | <= | 2項演算子 | 左辺は右辺以下 |
〃 | == | 2項演算子 | 左辺と右辺は等しい |
〃 | != | 2項演算子 | 左辺等辺は等しくない |
論理演算子 | ! | 単項演算子 | 論理否定 |
〃 | && | 2項演算子 | 論理積 |
〃 | || | 2項演算子 | 論理和 |
条件演算子 | ?: | 3項演算子 | 条件演算子 |
複合代入演算子 | += | 2項演算子 | 左辺に右辺を加算して左辺に代入 |
〃 | -= | 2項演算子 | 左辺から右辺を減算して左辺に代入 |
〃 | *= | 2項演算子 | 左辺と右辺を掛け算して左辺に代入 |
〃 | /= | 2項演算子 | 左辺を右辺で割り算して左辺に代入 |
〃 | %= | 2項演算子 | 左辺を右辺で割り算した余りを左辺に代入 |
null 合体演算子 | ?? | 2 項演算子 | 左辺が null でない場合はその値、null の場合は右辺の 値を返す |
四則演算と剰余
四則演算(加算、減算、乗算、除算)と剰余の5項目を算術演算子といいます。
これらを使って数値の計算を行います。
■算術演算子の例
int num1 = 10;
int num2 = 5;
Console.WriteLine($"num1({num1})+num2({num2})は{(num1 + num2)}です。");
Console.WriteLine($"num1({num1})-num2({num2})は{(num1 - num2)}です。");
Console.WriteLine($"num1({num1})-num2({num2})は{(num2 - num1)}です。");
Console.WriteLine($"num1({num1})*num2({num2})は{(num1 * num2)}です。");
Console.WriteLine($"num1({num1})/num2({num2})は{(num1 / num2)}です。");
Console.WriteLine($"num1({num1})%num2({num2})は{(num1 % num2)}です。");
■出力結果
num1(10)+num2(5)は 15 です。
num1(10)-num2(5)は 5 です。
num1(10)-num2(5)は -5 です。
num1(10)*num2(5)は 50 です。
num1(10)/num2(5)は 2 です。
num1(10)%num2(5)は 0 です。
※除算(/)と剰余(%)を使い際は、分母(右側)に0を指定してはいけません。エラーになります。
評価について
演算子とオペランドの組合せを式と言います。
「+」は左右のオペランドを使用して計算を行い、結果を求めます。
この結果を求める処理のことを「評価」と呼びます。
また、評価により得られた結果の値を「評価値」と呼びます。
「=」は右辺の評価値を左辺の変数に代入する機能を持ちます。等しいって意味でないので注意!!
実際のコードはこんな感じです。
int num1 = 10;
int num2 = 5;
// num1+num2の値をsumに代入
int sum1 = num1 + num2;
inr sum2 = sum1 + 1;
Console.WriteLine($"num1の値は{num1}です。");
Console.WriteLine($"num2の値は{num2}です。");
Console.WriteLine($"num1+num2の値は{sum1}です。");
Console.WriteLine($"sum1+1の値は{sum2}です。");
■出力結果
num1の値は10です。
num2の値は5です。
num1+num2の値は15です。
sum1+1の値は16です。
評価で使った変数の値は変更されません。変更されるタイミングは代入した場合です。
下記のようなコードだと変更されます。
num1 = num1 + 1;
変数num1に1を足した評価値を変数num1に代入する。
インクリメント、デクリメント
■インクリメント、デクリメントの基本
インクリメントとは、変数の値に 1 加算して、同じ変数に代入すること。「++」で表現する。
デクリメントとは、変数の値から 1 減算して、同じ変数に代入すること。「–」で表現する。
・インクリメント演算子
int num1 = 1;
num1++; //変数num1は2になる (num1 = num1 + 1 と同じ意味)
・デクリメント演算子
int num1 = 1;
num1--; //変数num1は0になる (num1 = num1 - 1 と同じ意味)
■インクリメント(デクリメント)演算子の位置
インクリメント(デクリメント)演算子は、オペランドを 1 つしか持たない単項演算子で、オペランドの前か、後ろに演算子を記述できます。
オペランドの前に置くことを前置、後ろに置くことを後置と呼びます。
・前置
++num;
・後置
num++;
前置も後置も変数の値を1増やすという意味で同じです。
ですが、他の処理を組み合わせる場合、前置と後置では実行結果が異なります。
実際の出力内容を見ていきましょう。
int num1 = 1;
int num2 = 0;
num2 = num1++;
//後置インクリメントを使用
Console.WriteLine("後置:num2=num1++;");
Console.WriteLine($"num2の値は{num2}です。");
Console.WriteLine($"num1の値は{num1}です。");
num2 = ++num1;
// 前置インクリメントを使用
Console.WriteLine("前置:num2=++num1;");
Console.WriteLine($"num2の値は{num2}です。");
Console.WriteLine($"num1の値は{num1}です。");
■出力結果
後置:num2=num1++;
num2 の値は 1 です。
num1 の値は 2 です。
前置:num2=++num1;
num2 の値は 3 です。
num1 の値は 3 です。
前置と後置でインクリメント(デクリメント)演算子が実行されるタイミングが異なるということが原因です。
後置の場合は、「変数 num2 に num1 の値を代入した後で、num1 の値を 1 増やす」という処理
が行われます。
また前置の場合は、「num1 の値を 1 増やした後に、変数 num2 に num1 の値を代入する」という処理が行われます。
このように、インクリメント(デクリメント)演算子と他の演算子の処理を組み合わせると想定外
の処理結果になる恐れがあります
実際の現場では、インクリメントとデクリメントは、他の演算処理と切り離して記述することが多かったですね。正直、どっちがどっちかわからなくなる時ありますしね・・・
複合代入演算子
複合代入演算子とは下記の表のとおり、「+=」「-=」のことです。
今まで登場してきた「=」は代入演算子に言います。
記号 | 名前 | 使用例 | 同じ処理 |
+= | 加入代入 | num1 += num2 | num1 = num1 + num2 |
-= | 減算代入 | num1 -= num2 | num1 = num1 – num2 |
*= | 乗算代入 | num1 *= num2 | num1 = num1 * num2 |
/= | 除算代入 | num1 /= num2 | num1 = num1 / num2 |
%= | 剰余代入 | num1 %= num2 | num1 = num1 % num2 |
複合代入演算子の方がシンプルで分かりやすいです!
※注意 複合演算子は「+」「=」などの記号の組み合わせで表現するので、「+」「=」の間にスペースは開けないようにしてください。
文字列の結合
「+」演算子は数字の加算だけでなく、文字列を連結することもできます。
int num1 = 1;
int num2 = 2;
Console.WriteLine("num1+num2は" + (num1 + num2) + "です。");
Console.WriteLine("num1+num2は" + "(num1 + num2)" + "です。");
■出力結果
num1+num2は3です。
num1+num2は(num1 + num2)です。
型変換
■サイズが大きい型に代入する
int iHeight = 160;
int iWeight = 62;
Console.WriteLine($"身長は{iHeight}cm です。");
Console.WriteLine($"体重は{iWeight}kg です。");
// サイズが大きい型に代入
double dHeight = iHeight;
double dWeight = iWeight;
Console.WriteLine("double 型に代入後");
Console.WriteLine($"身長は{dHeight}cm です。");
Console.WriteLine($"体重は{dWeight}kg です。");
■出力結果
身長は 160cm です。
体重は 62kg です。
double 型に代入後
身長は 160cm です。
体重は 62kg です。
代入する値の型よりも変数の型のサイズが大きい場合、その変数に代入すると、自動的に変数の型に合わせて値の型が変換されます。
この処理のことを型変換と呼びます。
■サイズが小さい型に代入する
double dHeight = 160.5;
double dWeight = 61.3;
Console.WriteLine($"身長は{dHeight:F}cm です。");
Console.WriteLine($"体重は{dWeight:F}kg です。");
// サイズが小さい型に代入
int iHeight = (int)dHeight;
int iWeight = (int)dWeight;
Console.WriteLine("int 型に代入後");
Console.WriteLine($"身長は{iHeight}cm です。");
Console.WriteLine($"体重は{iWeight}kg です。");
■出力結果
身長は 160.50cm です。
体重は 61.30kg です。
int 型に代入後
身長は 160cm です。
体重は 61kg です。
小さいサイズの型に代入するには、「明示的な型変換(キャスト)」を行う必要があります。
型名を()で囲ったものをキャスト演算子と呼びます。
■異なる型どおしの数値の演算
異なる型の値で評価した場合は、小さいサイズの型を大きいサイズの型に変換してから演算します。
そのためdouble型とint型で計算する場合は、評価値はdouble型になります。
int width = 9;
double height = 8.5;
// int型とdouble型の数値の演算
Console.WriteLine($"四角形の面積は{width * height}cm2です。");
■出力結果
四角形の面積は72.5cm2です。
コメント