- 算術演算子。
- 関係演算子。
- 論理演算子。
- ビットごとの演算子。
- 代入演算子;
- 他のオペレーター。
これらの演算子を個別に紹介しましょう。
算術演算子
算術演算子は、特定の算術演算を実行するシンボルです。C# でサポートされている算術演算子を次の表に示します: (変数 A = 10、変数 B = 20 と仮定します)
オペレーター | 説明 | 例 |
---|---|---|
+ | 加算演算子。演算子の左側と右側のオペランドに対して加算演算を実行します。 | A + B 値は 30 |
– | 減算演算子。演算子の左側と右側のオペランドに対して減算演算を実行します。 | A – B 値は -10 |
* | 乗算演算子。演算子の左側と右側のオペランドを乗算します。 | A*B 値は 200 |
/ | 除算演算子。左側のオペランドを右側のオペランドで除算します。 | B/A値は2です |
% | モジュロ演算子、除算後の剰余 | B % A 値は 0 |
++ | インクリメント演算子、整数値を 1 ずつインクリメントします | A++ 値 11 |
— | デクリメント演算子。整数値が 1 ずつ減らされます。 | A– 値は 9 |
ここでは、変数の前または後ろで使用できる自己インクリメント演算子と自己デクリメント演算子に焦点を当てます。変数の前にある場合は、自己インクリメントまたは自己デクリメント操作が最初に実行され、その後、値が変数に割り当てられることを意味します。変数の後ろにある場合は、その逆で、値が割り当てられます。最初に変数に代入され、その後自己インクリメントまたは自己デクリメント演算が実行されます。
次の例は、C# での算術演算子の適用を示しています。
using System;
namespace it-kiso.com
{
class Demo
{
static void Main(string[] args)
{
int a = 10;
int b = 20;
Console.WriteLine("a + b = {0}", a + b);
Console.WriteLine("a - b = {0}", a - b);
Console.WriteLine("a * b = {0}", a * b);
Console.WriteLine("a / b = {0}", a / b);
Console.WriteLine("a % b = {0}", a % b);
Console.WriteLine("++a の値は {0}", ++a);
a = 10; // 変数 a に再び値を代入
Console.WriteLine("a-- の値は {0}", a--);
Console.WriteLine("a の値は {0}", a);
Console.ReadLine();
}
}
}
操作の結果は次のようになります。
a + b = 30
a – b = -10
a * b = 200
a / b = 0
a % b = 10
++a の値は 11
a– の値は 10
a の値は 9
関係演算子
関係演算子は、演算子の左側と右側のオペランドを比較するために使用されます。次の表に、C# でサポートされているすべての関係演算子を示します: (変数 A = 10、変数 B = 20 と仮定します)
オペレーター | 説明 | 例 |
---|---|---|
== | 2 つのオペランドの値が等しいかどうかを確認し、等しい場合は条件が true になります。 | (A == B) は真ではありません |
!= | 2 つのオペランドの値が等しいかどうかを確認し、等しくない場合は条件が true になります。 | (A != B) は true |
> | 左側のオペランドの値が右側のオペランドの値より大きいかどうかを確認し、大きい場合は条件が true になります。 | (A > B) は当てはまりません |
< | 左のオペランドの値が右のオペランドの値より小さいかどうかを確認し、はいの場合は条件が true になります。 | (A < B) は真です |
>= | 左のオペランドの値が右のオペランドの値以上であるかどうかを確認し、はいの場合は条件が true になります。 | (A >= B) は真ではありません |
<= | 左のオペランドの値が右のオペランドの値以下であるかどうかを確認し、はいの場合は条件が true になります。 | (A <= B) は true |
次の例は、C# での関係演算子の使用を示しています。
using System;
namespace it-kiso.com
{
class Demo
{
static void Main(string[] args)
{
int a = 10;
int b = 20;
if (a == b){
Console.WriteLine("a は b と等しいです");
}else{
Console.WriteLine("a は b と等しくありません");
}
if (a < b){
Console.WriteLine("a は b より小さいです");
}else{
Console.WriteLine("a は b 以上です");
}
if (a > b){
Console.WriteLine("a は b より大きいです");
}else{
Console.WriteLine("a は b 未満です");
}
if (a <= b){
Console.WriteLine("a は b 以下です");
}
if (b >= a){
Console.WriteLine("b は a 以上です");
}
}
}
}
ヒント: この例で使用されているif else ステートメントについては、後ほど詳しく説明します。
論理演算子
次の表は、C# でサポートされている論理演算子のリストです (変数 A のブール値が true、変数 B のブール値が false であると仮定します)。
オペレーター | 説明 | 例 |
---|---|---|
&& | 論理 AND 演算子。両方のオペランドが true の場合、結果は true になります。 | (A && B) は false |
|| | 論理 OR 演算子。2 つのオペランドのいずれかが true の場合、結果は true になります。 | (A || B) は true |
! | 論理 NOT 演算子。オペランドの論理状態を反転するために使用されます。結果が true の場合、反転は false になります。 | !(A && B) は true |
次の例は、C# での論理演算子の使用を示しています。
using System;
namespace it-kiso.com
{
class Demo
{
static void Main(string[] args)
{
bool a = true;
bool b = false;
if (a && b){
Console.WriteLine("(a && b) condition is true");
}else{
Console.WriteLine("(a && b) condition is false");
}
if (a || b){
Console.WriteLine("(a || b) condition is true");
}else{
Console.WriteLine("(a || b) condition is false");
}
if (!(a && b)){
Console.WriteLine("!(a && b) condition is true");
}else{
Console.WriteLine("!(a && b) condition is false");
}
Console.ReadLine();
}
}
}
(a && b) condition is false
(a || b) condition is true
!(a && b) condition is true
ビット演算子
ビット単位の演算子は、バイナリ ビットの演算に使用されます。&、|、および ^ の真理値表は次のとおりです。
p | q | P&Q | p | q | p ^ q |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 1 | 1 |
A = 60、B = 13 と仮定すると、それらのバイナリ形式とビット演算結果は次のようになります。
A = 0011 1100
B = 0000 1101
-------------------
A&B = 0000 1100
A|B = 0011 1101
A^B = 0011 0001
~A = 1100 0011
次の表は、C# でサポートされているビット演算子の一覧です (変数 A = 60、変数 B = 13 と仮定します)。
オペレーター | 説明 | 例 |
---|---|---|
& | ビットごとの AND。2 つのオペランドのバイナリ ビットに対してビットごとの AND 演算を実行します。つまり、2 つの数値の対応するバイナリ ビットが両方とも 1 の場合、結果のビットは 1 になり、それ以外の場合は 0 になります。 | (A と B) は 12、つまり 0000 1100 になります。 |
| | ビットごとの OR。2 つのオペランドのバイナリ ビットに対してビットごとの OR 演算を実行します。つまり、2 つの数値に対応するバイナリ ビットの 1 つが 1 の場合、結果は 1 になり、それ以外の場合は 0 になります。 | (A | B) は 61、つまり 0011 1101 を取得します。 |
^ | ビットごとの XOR。2 つのオペランドのバイナリ ビットに対してビットごとの XOR 演算を実行します。つまり、2 つの数値の対応するバイナリ ビットが異なる場合、結果は 1 になり、そうでない場合は 0 になります。 | (A ^ B) は 49、つまり 0011 0001 を取得します。 |
~ | ビット単位の否定。この演算子にはビットを「反転」する効果があります。つまり、符号ビットを含め、0 が 1 になり、1 が 0 になります。 | (~A ) は -61 を取得します。これは 1100 0011 です |
<< | 2 項左シフト演算子。左オペランドの値は、右オペランドで指定されたビット数だけ左にシフトされます。 | << 2 は 240、つまり 1111 0000 を取得します。 |
>> | 2 項右シフト演算子。左オペランドの値は、右オペランドで指定されたビット数だけ右にシフトされます。 | >> 2 は 15 を取得します。これは 0000 1111 です。 |
サンプルコードは次のとおりです。
using System;
namespace it-kiso.com
{
class Demo
{
static void Main(string[] args)
{
int a = 60; /* 60 = 0011 1100 */
int b = 13; /* 13 = 0000 1101 */
int c = 0;
c = a & b; /* 12 = 0000 1100 */
Console.WriteLine("a & b の値は {0}", c );
c = a | b; /* 61 = 0011 1101 */
Console.WriteLine("a | b の値は {0}", c);
c = a ^ b; /* 49 = 0011 0001 */
Console.WriteLine("a ^ b の値は {0}", c);
c = ~a; /*-61 = 1100 0011 */
Console.WriteLine("~a の値は {0}", c);
c = a << 2; /* 240 = 1111 0000 */
Console.WriteLine("a << 2 の値は {0}", c);
c = a >> 2; /* 15 = 0000 1111 */
Console.WriteLine("a >> 2 の値は {0}", c);
Console.ReadLine();
}
}
}
操作の結果は次のようになります。
a & b の値は 12
a | b の値は 61
a ^ b の値は 49
~a の値は -61
a << 2 の値は 240
a >> 2 の値は 15
代入演算子
名前が示すように、代入演算子は変数に値を代入するために使用されます。次の表に、C# でサポートされている代入演算子の一覧を示します。
オペレーター | 説明 | 例 |
---|---|---|
= | 最も単純な代入演算子。右オペランドの値を左オペランドに代入します。 | C = A + B は、A + B の値を C に代入します。 |
+= | 加算および代入演算子。右オペランドを左オペランドに加算した結果を左オペランドに代入します。 | C += A は C = C + A と同等です |
-= | 減算および代入演算子は、左オペランドから右オペランドを減算した結果を左オペランドに代入します。 | C -= A は C = C – A と同等です |
*= | 乗算および代入演算子。右オペランドと左オペランドを乗算した結果を左オペランドに代入します。 | C *= A は C = C * A と同等です |
/= | 除算と代入演算子は、左オペランドを右オペランドで除算した結果を左オペランドに代入します。 | C /= A は C = C / A と同等です |
%= | モジュラスと代入演算子。2 つのオペランドのモジュロを求め、左のオペランドに代入します。 | C %= A は C = C % A と同等です |
<<= | 左シフトと代入演算子 | C <<= 2 は C = C << 2 と同等です |
>>= | 右シフトおよび代入演算子 | C >>= 2 は C = C >> 2 と同等です |
&= | ビット単位および代入演算子 | C &= 2 は C = C & 2 と同等です |
^= | ビット単位の排他的論理和および代入演算子 | C ^= 2 は C = C ^ 2 と同等です。 |
|= | ビット単位および代入演算子 | C |= 2 は C = C | 2 と同等です。 |
次の例は、C# での代入演算子の使用を示しています。
using System;
namespace it-kiso.com
{
class Demo
{
static void Main(string[] args)
{
int a = 33;
int c;
c = a;
Console.WriteLine("c = a の値は {0}", c);
c += a;
Console.WriteLine("c += a の値は {0}", c);
c -= a;
Console.WriteLine("c -= a の値は {0}", c);
c *= a;
Console.WriteLine("c *= a の値は {0}", c);
c /= a;
Console.WriteLine("c /= a の値は {0}", c);
c = 123;
c %= a;
Console.WriteLine("c %= a の値は {0}", c);
c <<= 2;
Console.WriteLine("c <<= 2 の値は {0}", c);
c >>= 2;
Console.WriteLine("c >>= 2 の値は {0}", c);
c &= 2;
Console.WriteLine("c &= 2 の値は {0}", c);
c ^= 2;
Console.WriteLine("c ^= 2 の値は {0}", c);
c |= 2;
Console.WriteLine("c |= 2 の値は {0}", c);
Console.ReadLine();
}
}
}
操作の結果は次のようになります。
c = a の値は 33
c += a の値は 66
c -= a の値は 33
c *= a の値は 1089
c /= a の値は 33
c %= a の値は 24
c <<= 2 の値は 96
c >>= 2 の値は 24
c &= 2 の値は 0
c ^= 2 の値は 2
c |= 2 の値は 2
上記で紹介した演算子に加えて、次の表に示すように、他のいくつかの重要な演算子が C# でサポートされています。
オペレーター | 説明 | 例 |
---|---|---|
sizeof() | データの種類のサイズを返します。 | sizeof(int)、4を返します |
typeof() | クラスの型を返す | typeof(StreamReader); |
& | 変数のアドレスを返す | &a は変数の実際のアドレスを取得します |
* | 変数ポインタ | *a; は変数を指します。 |
? : | 三項(三項)演算子 | a>b ? X : Y; 条件が true の場合、値は X です。それ以外の場合、値は Y です。 |
is | オブジェクトが特定のタイプであるかどうかを判断する | if( Ford is Car) // Ford がクラス Car のオブジェクトかどうかを確認します |
as | 必須の変換。変換が失敗した場合でも例外はスローされません。 | オブジェクト obj = new StringReader(“Hello”); StringReader r = obj as StringReader; |
次の例は、上記の演算子の使用法を示しています。
using System;
namespace it-kiso.com
{
class Demo
{
static void Main(string[] args){
/* sizeof演算子の例 */
Console.WriteLine("intのサイズは{0}です。", sizeof(int));
Console.WriteLine("shortのサイズは{0}です。", sizeof(short));
Console.WriteLine("doubleのサイズは{0}です。", sizeof(double));
/* 三項演算子の例 */
int a, b;
a = 11;
b = (a == 1) ? 20 : 30;
Console.WriteLine("bの値は{0}です。", b);
b = (a == 11) ? 20 : 30;
Console.WriteLine("bの値は{0}です。", b);
Console.ReadLine();
}
}
}
操作の結果は次のようになります。
intのサイズは4です。
shortのサイズは2です。
doubleのサイズは8です。
bの値は30です。
bの値は20です。