演算子の種類

 プログラムの中で処理を表現するために、演算子を使用します。次のような種類があります。

■ 算術演算子

 値を計算します。

演算子 意味 使用例
+ 一方の数値を他方の数値に足す
文字列型の場合は文字列を連結する
num1 + num2
- 一方の数値を他方の数値から引く num1 – num2
- 数値の符号を反転させる -num1
* 一方の数値に他方の数値を掛ける num1 * num2
/ 一方の数値を他方の数値で割る num1 / num2
% 一方の数値を他方の数値で割った時の余りを求める num1 % num2
++ 1加算する(インクリメント) num1++
-- 1減算する(デクリメント) num1--
<< 数値のビット・バターンを左にシフトする num1 << 1
>> 数値のビット・バターンを右にシフトする num1 >> 1
算術演算子

○ プロジェクト

 次のようにプロジェクトを作成してください。

プロジェクトの種類 コンソール アプリケーション
プロジェクト名 ArithmeticTest

サンプルダウンロード

○ プログラム

 次のようにプログラムを入力してください。

  1. static void Main(string[] args)
  2. {
  3.  //変数の宣言
  4.  var num1 = 10;
  5.  var num2 = 3;
  6.  //算術演算の結果を表示する
  7.  Console.WriteLine("加算: {0}", num1 + num2);
  8.  Console.WriteLine("減算: {0}", num1 - num2);
  9.  Console.WriteLine("反転: {0}", -num1);
  10.  Console.WriteLine("乗算: {0}", num1 * num2);
  11.  Console.WriteLine("除算: {0}", num1 / num2);
  12.  Console.WriteLine("剰余: {0}", num1 % num2);
  13.  Console.WriteLine("インクリメント: {0}", num1++);
  14.  Console.WriteLine("デクリメント: {0}", num1--);
  15.  Console.WriteLine("左シフト: {0}", num1 << 1);
  16.  Console.WriteLine("右シフト: {0}", num1 >> 1);
  17.  Console.ReadLine();
  18. }

○ 実行結果

加算: 13
減算: 7
反転: -10
乗算: 30
除算: 3
剰余: 1
インクリメント: 10
デクリメント: 11
左シフト: 20
右シフト: 5

○ 解説

 14~15行目では2つの変数を宣言しています。varキーワードを使って初期化されるデータから型を推論して変数が用意されます。18~27行目で算術演算をして結果を表示しています。今回はConsole.WriteLine()の指定の方法は複合書式指定文字列を使用しています。この方法は、文字列の中に「{}」を指定して、そのあと「,」で埋め込むデータを指定します。

 26行目は変数のデータを2進数表現で左側にずらします。1つ、ずらすと10進数で2倍しているのと同じことになります。2つ、ずらすと4倍、3つ、ずらすと8倍と1つ、ずらすごとに2の2乗倍することになります。27行目は変数のデータを2進数表現で右側にずらします。1つ、ずらすと10進数で、2で割っているのと同じことになります。2つ、ずらすと4で割る、3つ、ずらすと8で割ると、1つずつ、ずらすごとに2の2乗で割っていることになります。

■ 代入演算子

 計算結果を代入します。

演算子 意味 使用例
= データを変数に代入する num = 2
*= 変数に格納されているデータと乗算し、その結果を変数に代入する num *= 2
/= 変数に格納されているデータと除算し、その結果を変数に代入する num /= 2
%= 変数に格納されているデータと除算し、その余りを変数に代入する num %= 2
+= 変数に格納されているデータと加算し、その結果を変数に代入する
文字列型の場合は文字列を連結し、その結果を変数に代入する。
num += 2
str += “2”
-= 変数に格納されているデータを減算し、その結果を変数に代入する num -= 2
<<= 変数に格納されているデータを左シフトし、その結果を変数に代入する num <<= 2
>>= 変数に格納されているデータを右シフトし、その結果を変数に代入する num >>= 2
代入演算子

○ プロジェクト

 次のようにプロジェクトを作成してください。

プロジェクトの種類 コンソール アプリケーション
プロジェクト名 AssignmentTest

サンプルダウンロード

○ プログラム

 次のようにプログラムを入力してください。

  1. static void Main(string[] args)
  2. {
  3.  //変数の宣言
  4.  int num;
  5.  //代入演算とその結果を表示する
  6.  num = 10;
  7.  Console.WriteLine("代入: {0}", num);
  8.  num *= 2;
  9.  Console.WriteLine("乗算: {0}", num);
  10.  num /= 2;
  11.  Console.WriteLine("除算: {0}", num);
  12.  num %= 3;
  13.  Console.WriteLine("剰余: {0}", num);
  14.  num += 2;
  15.  Console.WriteLine("加算: {0}", num);
  16.  num -= 1;
  17.  Console.WriteLine("減算: {0}", num);
  18.  num <<= 1;
  19.  Console.WriteLine("左シフト: {0}", num);
  20.  num >>= 2;
  21.  Console.WriteLine("右シフト: {0}", num);
  22.  var str = "メロンが";
  23.  str += "食べたい。";
  24.  Console.WriteLine("文字列: {0}", str);
  25.  Console.ReadLine();
  26. }

○ 実行結果

代入: 10
乗算: 20
除算: 10
剰余: 1
加算: 3
減算: 2
左シフト: 4
右シフト: 1
文字列: メロンが食べたい。

○ 解説

 17行目は変数numに10を格納します。19行目は先ほど格納した「10」に2を乗算して再び変数numに格納します。21行目は先ほど格納した「20」を2で除算して変数numに格納します。23行目は先ほど格納した「10」に3で除算した余りを変数numに格納します。25行目は先ほど格納した「1」に2を加算して変数numに格納します。27行目は先ほど格納した「3」を1で減算して変数numに格納します。29行目は先ほど格納した「2」を左に1ビット分ずらして、変数numに格納します。31行目は先ほど格納した「4」を右に2ビット分ずらして、変数numに格納します(格納される値は1)。

 34行目は変数strに文字列「メロンが」を格納しています。35行目で変数strに格納されている「メロンが」に「食べたい。」を文字列結合して、再び変数strに格納しました。

■ 比較演算子

 条件を比較してbool値を算出します。

演算子 意味 使用例
== 2つのデータが等しいことを確認する num1 == num2
!= 2つのデータが等しくないことを確認する num1 != num2
< 一方のデータが他方のデータより小さいことを確認する num1 < num2
> 一方のデータが他方のデータより大きいことを確認する num1 > num2
<= 一方のデータが他方のデータ以下であることを確認する num1 <= num2
>= 一方のデータが他方のデータ以上であることを確認する num1 >= num2
比較演算子

○ プロジェクト

 次のようにプロジェクトを作成してください。

プロジェクトの種類 コンソール アプリケーション
プロジェクト名 RelationalTest

サンプルダウンロード

○ プログラム

 次のようにプログラムを入力してください。

  1. static void Main(string[] args)
  2. {
  3.  //変数の宣言
  4.  var num1 = 10;
  5.  var num2 = 5;
  6.  //比較した結果を表示
  7.  Console.WriteLine("等しい: {0}", num1 == num2);
  8.  Console.WriteLine("等しくない: {0}", num1 != num2);
  9.  Console.WriteLine("より小さい: {0}", num1 < num2);
  10.  Console.WriteLine("より大きい: {0}", num1 > num2);
  11.  Console.WriteLine("以下: {0}", num1 <= num2);
  12.  Console.WriteLine("以上: {0}", num1 >= num2);
  13.  Console.ReadLine();
  14. }

○ 実行結果

等しい: False
等しくない: True
より小さい: False
より大きい: True
以下: False
以上: True

○ 解説

 18行目は変数num1の値と変数num2の値が等しいかどうかを判断します。等しくないので「False」が出力されます。19行目は変数num1の値と変数num2の値が等くないかどうかを判断します。等しくないので「True」が出力されます。20行目は変数num1の値が変数num2の値がより小さいかどうかを判断します。小さくないので「False」が出力されます。21行目は変数num1の値が変数num2の値より大きいかどうかを判断します。大きいので「True」が出力されます。22行目は変数num1の値が変数num2の値以下かどうかを判断します。以下ではないので「False」が出力されます。23行目は変数num1の値が変数num2の値以上かどうかを判断します。以上なので「True」が出力されます。

■ 論理演算子

 論理演算をしてbool値を算出します。

演算子 意味 使用例
! ブール値の論理否定を求める !(num1 < num2)
& 2つのブール値の論理積を求める num1 > 1 & num1 < 10
&& 2つのブール値の論理積を求める(ショートサーキット)
必要な場合のみ2番目の論理演算を処理する
num1 > 1 && num1 < 10
| 2つのブール値の論理和を求める num1 > 0 | num2 < 0
|| 2つのブール値の論理和を求める(ショートサーキット)
必要な場合のみ2番目の論理演算を処理する
num1 > 0 || num2 < 0
^ 2つのブール値の排他的論理和を求める num1 == 10 ^ num2 == 5
論理演算子

○ プロジェクト

 次のようにプロジェクトを作成してください。

プロジェクトの種類 コンソール アプリケーション
プロジェクト名 LogicalTest

サンプルダウンロード

○ プログラム

 次のようにプログラムを入力してください。

  1. static void Main(string[] args)
  2. {
  3.  //変数の宣言
  4.  var num1 = 10;
  5.  var num2 = 5;
  6.  //論理演算の結果を表示
  7.  Console.WriteLine("否定: {0}", !(num1 < num2));
  8.  Console.WriteLine("論理積: {0}", (num1 > 0 & num1 < 10));
  9.  Console.WriteLine("論理和: {0}", (num1 > 0 | num2 < 0));
  10.  Console.WriteLine("排他的論理和: {0}", ((num1 == 10) ^ (num2 == 5)));
  11.  Console.WriteLine("論理積(ショートサーキット): {0}", (num1 > 0 && num1 < 10));
  12.  Console.WriteLine("論理和(ショートサーキット): {0}", (num1 > 0 || num2 < 0));
  13.  Console.ReadLine();
  14. }

○ 実行結果

否定: True
論理積: False
論理和: True
排他的論理和: False
論理積(ショートサーキット): False
論理和(ショートサーキット): True

○ 解説

 18行目は変数num1と変数num2を比較します。今回は「10 < 5」となるので条件としては「false」です。しかし、「!」が付いているので否定として扱われ、「falseではない」つまり「true」と出力されます。

 19行目は2つの条件判断の結果をもとに判断します。今回は「num1 > 0」で「true」、「num2 < 10」で「false」となります。この2つの判断の結果を「true & false」のようにさらに判断します。結果は「false」になります。論理積は次のような結果が出力されます。2つの条件が「true」の場合のみ「true」となります。

条件1 条件2 出力
false false false
false true false
true false false
true true true
条件1 & 条件2の出力

 20行目は2つの条件判断の結果をもとに判断します。今回は「num1 > 0」で「true」、「num2 < 0」で「false」となります。この2つの判断の結果を「true | false」のようにさらに判断します。結果は「true」になります。論理和は次のような結果が出力されます。2つの条件のうち少なくともどちらか一方が「true」であれば「true」になります。

条件1 条件2 出力
false false false
false true true
true false true
true true true
条件1 | 条件2の出力

 21行目は2つの条件判断の結果をもとに判断します。今回は「num1 == 10」で「true」、「num2 == 5」で「true」となります。この2つの判断の結果を「true ^ true」のようにさらに判断します。結果は「false」になります。排他的論理和は次のような結果が出力されます。2つの条件の結果が違えば「true」になります。

条件1 条件2 出力
false false false
false true true
true false true
true true false
条件1 ^ 条件2の出力

 22~23行目は、他方の条件で全体が決まる場合は、もう一方の条件判断を省略します。結果として「&」と「|」それぞれの判断と同じになります。

■ 条件演算子

 論理演算をしてbool値を算出し、2つの値のいずれかを返します。

演算子 意味 使用例
?: 論理演算を処理し、値を返す (num1 < 0) ? “-“ : “+”
条件演算子

■ キャスト(型変換)

 VC#は異なるデータ型の変数にデータを代入するときに型をチェックします。基本的には、サイズが大きいデータ型にサイズが小さいデータ型の値を代入することができます。しかし、データが失われる可能性のある代入は、通常の記述ではエラーになります。

例:

double d1 = 10.5;
int i1 = d1;     ← エラーになる

 データが失われる可能性のある代入は、次のように「キャスト」をすることで代入することができます。

例:

double d1 = 10.5;
int i1 = (int)d1;

前へ   次へ