プログラム基礎 ~演算子について(C#)~

プログラム基礎

演算子についての重要な点は以下になります。

  • 多く式は演算子とオペランドで構成されている
  • 「+」演算子は数字の加算だけでなく、文字列を連結することも
  • インクリメント演算子を使うことで、変数の値を 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 += num2num1 = num1 + num2
-=減算代入num1 -= num2num1 = num1 – num2
*=乗算代入num1 *= num2num1 = num1 * num2
/=除算代入num1 /= num2num1 = num1 / num2
%=剰余代入num1 %= num2num1 = 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です。

コメント

タイトルとURLをコピーしました