C#プログラミングにおいて、演算子は非常に重要な役割を担っています。
しかし、初心者にとってはその使い方がわかりづらいこともあります。そこで本記事では、C#での演算子の基本的な使い方から応用的な使い方まで、わかりやすく詳しく解説していきます。
C#での演算子とは
C#には、数値演算子、比較演算子、論理演算子などの様々な種類の演算子があります。
これらの演算子を使うことで、プログラム内で数値計算や条件分岐を行うことができます。
数値演算子
C#では、加算・減算・乗算・除算などの基本的な数値演算子が用意されています。以下に例を示します。
int a = 10;
int b = 3;
int c = a + b; // 加算
int d = a - b; // 減算
int e = a * b; // 乗算
int f = a / b; // 除算(商)
int g = a % b; // 除算(余り)
上記のコードでは、変数aに10を代入し、変数bに3を代入しています。そして、それぞれの演算結果を別々の変数に代入しています。
比較演算子
C#では、大小比較や等価比較などの比較演算子が用意されています。以下に例を示します。
int a = 10;
int b = 3;
bool c = a > b; // 大小比較(aがbより大きいか)
bool d = a < b; // 大小比較(aがbより小さいか)
bool e = a >= b; // 大小比較(aがb以上か)
bool f = a <= b; // 大小比較(aがb以下か)
bool g = a == b; // 等価比較(aとbが等しいか)
bool h = a != b; // 非等価比較(aとbが異なるか)
上記のコードでは、変数aに10を代入し、変数bに3を代入しています。そして、それぞれの比較結果を真偽値で表したものを別々の変数に代入しています。
論理演算子
C#では、ANDやORなどの論理演算子も用意されています。以下に例を示します。
bool x = true;
bool y = false;
bool z1 = x && y; // AND(xとyが両方trueか)
bool z2 = x || y; // OR(xまたはyがtrueか)
bool z3 = !x; // NOT(xがfalseか)
上記のコードでは、真偽値型の変数xとyにそれぞれtrueとfalseを代入しています。
そして、それぞれの論理式結果を真偽値で表したものを別々の変数に代入しています。 以上がC#で使用可能な主要な演算子です。
続いては、各種演算子について詳しく掘り下げて見てみましょう。
算術演算子の使い方
C#において、算術演算子は数値の計算を行うために使用されます。以下では、加算演算子、減算演算子、乗算演算子、除算演算子、剰余演算子について説明します。
加算演算子
加算演算子は、+
で表されます。2つの数値を足し合わせることができます。例えば、以下のようなコードを書くことができます。
int a = 5;
int b = 3;
int c = a + b; // cには8が代入される
減算演算子
減算演算子は、-
で表されます。2つの数値を引き合わせることができます。例えば、以下のようなコードを書くことができます。
int a = 5;
int b = 3;
int c = a - b; // cには2が代入される
乗算演算子
乗算演算子は、*
で表されます。2つの数値を掛け合わせることができます。例えば、以下のようなコードを書くことができます。
int a = 5;
int b = 3;
int c = a * b; // cには15が代入される
除算演算子
除算演算子は、/
で表されます。1つ目の数値から2つ目の数値を割り切れるだけ割った商を返します。例えば、以下のようなコードを書くことができます。
int a = 10;
int b = 3;
double c = (double)a / (double)b; // cには3.33333...が代入される
上記ではaやbもdouble型にキャストしています。これは整数同士の計算では小数点以下が切り捨てられて正しい計算結果が得られないためです。
剰余演算子
剰余演算子は、%
で表されます。1つ目の数値から2つ目の数値を割った余りを返します。例えば、以下のようなコードを書くことができます。
int a = 10;
int b = 3;
int c = a % b; // cには1が代入される
以上がC#における算術演算子の使い方です。
代入演算子の使い方
C#において、代入演算子は変数に値を代入するために使用されます。代入演算子は、単純代入演算子と複合代入演算子の2つの種類があります。
単純代入演算子
単純代入演算子は、変数に値を直接代入するために使用されます。以下は、単純代入演算子の例です。
int x = 10;
string str = "Hello World";
上記の例では、x
という名前の整数型変数に10を割り当て、str
という名前の文字列型変数に"Hello World"
を割り当てています。
加算代入演算子
加算代入演算子は、左辺の変数に右辺の値を加えた結果を左辺の変数に再度割り当てるために使用されます。以下は、加算代入演算子の例です。
int x = 5;
x += 3; // x = x + 3と同じ
上記の例では、最初にx
変数に5が割り当てられ、次に加算代入演算子が使われて3が追加されました。その結果、x
変数は8となります。
減算代入演算子
減算代入演算子は、左辺の変数から右辺の値を引いた結果を左辺の変数に再度割り当てるために使用されます。以下は、減算代入演算子の例です。
int x = 10;
x -= 4; // x = x - 4と同じ
上記の例では、最初にx
変数に10が割り当てられ、次に減算代入演算子が使われて4が引かれました。その結果、x
変数は6となります。
乗算代入演算子
乗算代入演算子は、左辺の変数と右辺の値を掛けた結果を左辺の変数に再度割り当てるために使用されます。以下は、乗算代入演算子の例です。
int x = 2;
x *= 5; // x = x * 5と同じ
上記の例では、最初にx
変数に2が割り当てられ、次に乗算代入演算子が使われて5が掛けられました。その結果、x
変数は10となります。
除算代入演算子
除算代入演算子は、左辺の変数を右辺の値で割った結果を左辺の変数に再度割り当てるために使用されます。以下は、除算代入演算子の例です。
int x = 10;
x /= 2; // x = x / 2と同じ
上記の例では、最初にx
変数に10が割り当てられ、次に除算代入演算子が使われて2で割られました。その結果、x
変数は10となります。
剰余代入演算子
剰余代入演算子は、左辺の変数を右辺の値で割った余りを左辺の変数に再度割り当てるために使用されます。以下は、剰余代入演算子の例です。
int x = 10;
x %= 3; // x = x % 3と同じ
上記の例では、最初にx
変数に10が割り当てられ、次に剰余代入演算子が使われて3で割られました。その結果の余りが代入されて、x
変数は1となります。
比較演算子の使い方
C#には、比較演算子というものがあります。これは、2つの値を比較するために使用されます。以下では、主要な比較演算子について説明します。
等価演算子
等価演算子(==
)は、左辺と右辺が等しい場合にtrueを返します。例えば、以下のコードでは、xとyが等しい場合にEqual
と表示されます。
int x = 5;
int y = 5;
if (x == y)
{
Console.WriteLine("Equal");
}
不等価演算子
不等価演算子(!=)
は、左辺と右辺が異なる場合にtrueを返します。例えば、以下のコードでは、xとyが異なる場合にNot Equal
と表示されます。
int x = 5;
int y = 10;
if (x != y)
{
Console.WriteLine("Not Equal");
}
大小比較演算子
大小比較演算子は、<
>
<=
>=
です。これらの演算子は数値型や文字列型で使用されます。例えば、以下のコードでは、xがyより小さい場合にLess than
と表示されます。
int x = 5;
int y = 10;
if (x < y)
{
Console.WriteLine("Less than");
}
三項演算子
三項演算子は、「条件 ? 式1 : 式2」という形式で書かれます。
条件がtrueであれば式1が評価され、falseであれば式2が評価されます。
例えば、以下のコードでは、xがyより小さい場合にLess than
と表示されます。そうでなければ、Greater than or equal to
と表示されます。
int x = 5;
int y = 10;
string result = (x < y) ? "Less than" : "Greater than or equal to";
Console.WriteLine(result);
論理演算子の使い方
C#には、論理演算子というものがあります。論理演算子は、真偽値を扱う際に使用されます。
論理積演算子
論理積演算子は、&&
で表されます。この演算子は、左右の式が共にtrueである場合にtrueを返します。一方、どちらかがfalseである場合はfalseを返します。以下に例を示します。
bool a = true;
bool b = false;
if (a && b)
{
Console.WriteLine("両方trueです");
}
else
{
Console.WriteLine("どちらかがfalseです");
}
上記のコードでは、変数aにtrueを代入し、変数bにfalseを代入しています。
そして、&&
演算子でaとbを比較しています。&&
演算子は、aとbの両方がtrueではないため、「どちらかがfalseです」と表示されます。
論理和演算子
論理和演算子は、||
で表されます。この演算子は、左右の式の少なくとも一方がtrueである場合にtrueを返します。
両方がfalseである場合はfalseを返します。以下に例を示します。
bool a = true;
bool b = false;
if (a || b)
{
Console.WriteLine("少なくとも一つがtrueです");
}
else
{
Console.WriteLine("両方falseです");
}
上記のコードでは、||
演算子でaとbを比較しています。||
演算子は、aまたはbの少なくとも一つがtrueであるため、「少なくとも一つがtrueです」と表示されます。
否定演算子
否定演算子は、!
で表されます。!
演算子は、式の結果を反転させます(真偽値型以外でも使用可能)。以下に例を示します。
bool a = true;
if (!a)
{
Console.WriteLine("aはfalseです");
}
else
{
Console.WriteLine("aはtrueです");
}
上記のコードでは、!
演算子で変数aの結果を反転させています。!
演算子によって「aはfalseです」と表示されます。
三項条件式(三項演算子)
三項条件式(三項演算子)は、? :
で表されます。? :
演算子では、条件分岐処理(if文)と同じような処理が行えます。
以下に例を示します。
int a = 10;
int b = 20;
string result = (a > b) ? "A is greater than B" : "B is greater than A";
Console.WriteLine(result);
上記のコードでは、? :
演算子で変数resultへ文字列型データ型A is greater than B``B is greater than A
を代入しています。
その他の演算子
C#には、算術演算子、代入演算子、比較演算子、論理演算子以外にも様々な種類の演算子があります。ここでは、その中でも代表的なビット演算子とシフト演算子について説明します。
ビット演算子
ビット単位の論理積(AND):&
ビット単位の論理積(AND)は、2つのオペランドの各ビットが両方とも1である場合に1を返します。それ以外の場合は0を返します。
// C#は0bXXXの形式で2進数表記可能
int a = 0b00000101; // 00000101
int b = 0b00000011; // 00000011
int c = a & b; // 00000001 (1)
ビット単位の論理和(OR):|
ビット単位の論理和(OR)は、2つのオペランドのどちらかが1である場合に1を返します。両方とも0である場合は0を返します。
int a = 0b00000101; // 00000101
int b = 0b00000011; // 00000011
int c = a | b; // 00000111 (7)
ビット単位の排他的論理和(XOR):^
ビット単位の排他的論理和(XOR)は、2つのオペランドが異なる場合に1を返し、同じ場合は0を返します。
int a = 0b00000101; // 00000101
int b = 0b00000011; // 00000011
int c = a ^ b; // 00000110 (6)
ビット反転(NOT):~
ビット反転(NOT)は、オペランド内の各ビットを反転させます。すなわち、0は1に変換され、1は0に変換されます。
int a = -6; // ...11111010 (-6)
int b = ~a; // ...00000101 (5)
代数演算子
左シフト:<<
左シフト(<<)は、指定された数だけビット列を左側へシフトさせます。右側に空いた領域には0が入ります。
int a = 5; // ...101 (5)
int b = a << 2;//10100 (20)
右シフト:>>
右シフト(>>)は、指定された数だけビット列を右側へシフトさせます。左側に空いた領域には符号ビットと同じ値が入ります。
int a = -6; // ...11111010 (-6)
int b = a >> 2;//...11111110 (-2)
その他の演算子
C#では上記以外にも様々な種類の演算子があります。例えば条件付きアクセス演算子?.
やヌル条件付き結合演算子??
などです。これらも使い方次第でコードを簡潔かつ読みやすくすることが出来ます。