English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
C#はオブジェクト指向(OOP)です+C#の演算子は、操作数に対して特定の数学的または論理的操作を行うための特別なシンボルです。C#には豊富な内蔵演算子があり、以下のように分類されます:
)は左右の数の和です。同様に、C#には様々な種類の操作に対する演算子が含まれています。
算術演算子
b = 0
論理演算子
位演算子
割り当て演算子
他の演算子
このチュートリアルでは、算術演算子、関係演算子、論理演算子、ビット演算子、代入演算子、その他の演算子を順に説明します。
以下の表は、C#がサポートするすべての算術演算子を示しています。変数 A 的值为 10以下の表は、C#がサポートするすべての関係演算子を示しています。変数 B 的值为 2、変数
演算子 | 説明 | 例 |
---|---|---|
+ | 二つの操作数を足す | 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 OperatorsAppl { class Program { static void Main(string[] args) { int a = 21; int b = 10; int c; c=a + b; Console.WriteLine("Line 1 - cの値は{0}、c); c=a - b; Console.WriteLine("Line 2 - cの値は{0}、c); c=a * b; Console.WriteLine("Line 3 - cの値は{0}、c); c=a / b; Console.WriteLine("Line 4 - cの値は{0}、c); c=a % b; Console.WriteLine("Line 5 - cの値は{0}、c); // ++aはまず自増算をし、その後値を設定 c = ++a; Console.WriteLine("Line 6 - cの値は{0}、c); // この時点でaの値は 22 // --aはまず自減算をし、その後値を設定 c = --a; Console.WriteLine("Line 7 - cの値は{0}、c); Console.ReadLine(); } } }
上記のコードがコンパイルされ実行されると、以下のような結果が得られます:
Line 1 - cの値は 31 Line 2 - cの値は 11 Line 3 - cの値は 210 Line 4 - cの値は 2 Line 5 - cの値は 1 Line 6 - cの値は 22 Line 7 - cの値は 21
c=a++: aの値をまずcに設定し、その後aを自増算。
c= ++a: aをまず自増算し、その後aの値をcに設定。
c=a--: aの値をまずcに設定し、その後aを自減算。
c= --a: aをまず自減算し、その後aの値をcに設定。
using System; namespace OperatorsAppl { class Program { static void Main(string[] args) { int a = 1; int b; // a++ まず値を設定し、その後自増算を行う b=a++; Console.WriteLine("a = {0}", a); Console.WriteLine("b = {0}", b); Console.ReadLine(); // ++aはまず自増算をし、その後値を設定 a = 1; // aを再初期化 b = ++a; Console.WriteLine("a = {0}", a); Console.WriteLine("b = {0}", b); Console.ReadLine(); // a-- まず値を設定し、その後自減算を行う a = 1; // aを再初期化 b=a--; Console.WriteLine("a = {0}", a); Console.WriteLine("b = {0}", b); Console.ReadLine(); // --aはまず自減算をし、その後値を設定 a = 1; // aを再初期化 b= --a; Console.WriteLine("a = {0}", a); Console.WriteLine("b = {0}", b); Console.ReadLine(); } } }
Console.WriteLine("b = {0}", b);
a = 2 b = 1 a = 2 b = 2 上記のプログラムを実行すると、出力結果は: b = 1 上記のプログラムを実行すると、出力結果は: a = 0
関係演算子 A 的值为 10以下の表は、C#がサポートするすべての関係演算子を示しています。変数 B 的值为 2、変数
演算子 | 説明 | 例 |
---|---|---|
0の場合、 | == | 二つの操作数の値が等しいかどうかを確認します。同じ場合は条件が真です。 |
(A == B) が偽です。 | != | 二つの操作数の値が等しいかどうかを確認します。異なる場合は条件が真です。 |
(A != B) が真です。 | > | 左操作数の値が右操作数の値以上であるかどうかを確認します。その場合、条件が真です。 |
(A > B) が偽です。 | < | 左操作数の値が右操作数の値以下であるかどうかを確認します。その場合、条件が真です。 |
(A < B) が真です。 | >= | 左操作数の値が右操作数の値以上であるかどうかを確認します。その場合、条件が真です。 |
(A >= B) が偽です。 | <= | 左操作数の値が右操作数の値以下であるかどうかを確認します。その場合、条件が真です。 |
(A <= B) が真です。
using System; class Program { static void Main(string[] args) { int a = 21; int b = 10; 以下の例を参照して、C#で使用できるすべての関係演算子を理解してください: { Console.WriteLine("Line 1 - a が b に等しい"); } else { Console.WriteLine("Line 1 - a が b に等しくない"); } if (a < b) { Console.WriteLine("Line 2 - a が b より小さい"); } else { Console.WriteLine("Line 2 - a が b 以上でない"); } if (a > b) { Console.WriteLine("Line 3 - a が b より大きい"); } else { Console.WriteLine("Line 3 - a が b 以下でない"); } /* aとbの値を変更します */ a = 5; b = 20; if (a <= b) { Console.WriteLine("Line 4 - a が b 以下"); } if (b >= a) { Console.WriteLine("Line 5 - b が a 以上"); } } }
上記のコードがコンパイルされ実行されると、以下のような結果が得られます:
Line 1 - a が b に等しくない Line 2 - a が b 以上でない Line 3 - a が b より大きい Line 4 - a が b 以下 Line 5 - b が a 以上
以下の表は、C#がサポートするすべての論理演算子を示しています。変数 A 布尔値 trueの場合、変数 B 布尔値 falseの場合、
演算子 | 説明 | 例 |
---|---|---|
&& | 論理と演算子と呼ばれます。二つの操作数がすべて非ゼロであれば条件が真です。 | (A && B) が偽です。 |
|| | 論理或演算子と呼ばれます。二つの操作数のうち少なくとも一つが非ゼロであれば条件が真です。 | (A || B) が真です。 |
! | 論理非演算子と呼ばれます。操作数の論理状態を逆転するために使用されます。条件が真の場合、論理非演算子はそれを偽にします。 | !(A && B) が真です。 |
以下の例を参照して、C#で使用できるすべての論理演算子を理解してください:
using System; namespace OperatorsAppl { class Program { static void Main(string[] args) { bool a = true; bool b = true; if (a && b) { Console.WriteLine("Line 1 - 条件为真); } if (a || b) { Console.WriteLine("Line 2 - 条件为真); } /* aとbの値を変更します */ a = false; b = true; if (a && b) { Console.WriteLine("Line 3 - 条件为真); } else { Console.WriteLine("Line 3 - 条件が真でない"); } if (!(a && b)) { Console.WriteLine("Line 4 - 条件为真); } Console.ReadLine(); } } }
上記のコードがコンパイルされ実行されると、以下のような結果が得られます:
Line 1 - 条件为真 Line 2 - 条件为真 Line 3 - 条件不为真 Line 4 - 条件为真
位演算子は位に対して作用し、各ビットごとに操作を行います。&、|、^の真値表は以下の通りです:
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 运算符复制一位到结果中。 | (A & B) 将得到 12、即为 0000 1100 |
| | 如果存在于任一操作数中,二进制 OR 运算符复制一位到结果中。 | (A | B) 将得到 61、即为 0011 1101 |
^ | 如果存在于其中一个操作数中但不同时存在于两个操作数中,二进制异或运算符复制一位到结果中。 | (A ^ B) 将得到 49、即为 0011 0001 |
~ | 按位取反运算符是一元运算符,具有"翻转"位效果,即0变成1、1变成0,包括符号位。 | (~A ) 将得到 -61,即为 1100 0011、一个有符号二进制数的补码形式。 |
<< | 二進位左シフト演算子。左辺の値を右辺で指定された位数だけ左にシフトします。 | A << 2 将得到 240,即为 1111 0000 |
>> | 二進位右シフト演算子。左辺の値を右辺で指定された位数だけ右にシフトします。 | A >> 2 将得到 15、即为 0000 1111 |
以下の例を参照して、C#で利用できるすべてのビット演算子を理解してください:
using System; namespace OperatorsAppl { class Program { 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("Line 1 - cの値は{0}、c); c = a | b; /* 61 = 0011 1101 */ Console.WriteLine("Line 2 - cの値は{0}、c); c = a ^ b; /* 49 = 0011 0001 */ Console.WriteLine("Line 3 - cの値は{0}、c); c = ~a; /*-61 = 1100 0011 */ Console.WriteLine("Line 4 - cの値は{0}、c); c = a << 2; /* 240 = 1111 0000 */ Console.WriteLine("Line 5 - cの値は{0}、c); c = a >> 2; /* 15 = 0000 1111 */ Console.WriteLine("Line 6 - cの値は{0}、c); Console.ReadLine(); } } }
上記のコードがコンパイルされ実行されると、以下のような結果が得られます:
Line 1 - cの値は 12 Line 2 - cの値は 61 Line 3 - cの値は 49 Line 4 - cの値は -61 Line 5 - cの値は 240 Line 6 - cの値は 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 |
%= | 求模および代入演算子、二つの操作数の模を左操作数に代入します。 | 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 OperatorsAppl { class Program { static void Main(string[] args) { int a = 21; int c; c = a; Console.WriteLine("Line 1 - = cの値 = {0} c += a; Console.WriteLine("Line 2 - += cの値 = {0} c -= a; Console.WriteLine("Line 3 - -= cの値 = {0} c *= a; Console.WriteLine("Line 4 - *= cの値 = {0} c /= a; Console.WriteLine("Line 5 - /= cの値 = {0} c = 200; c %= a; Console.WriteLine("Line 6 - %= cの値 = {0} c <<= 2; Console.WriteLine("Line 7 - <<= cの値 = {0} c >>= 2; Console.WriteLine("Line 8 - >>= cの値 = {0} c &= 2; Console.WriteLine("Line 9 - &= cの値 = {0} c ^= 2; Console.WriteLine("Line 10 - ^= cの値 = {0} c |= 2; Console.WriteLine("Line 11 - |= cの値 = {0} Console.ReadLine(); } } }
上記のコードがコンパイルされ実行されると、以下のような結果が得られます:
Line 1 - = cの値 = {0} 21 Line 2 - += cの値 = {0} 42 Line 3 - -= cの値 = {0} 21 Line 4 - *= cの値 = {0} 441 Line 5 - /= cの値 = {0} 21 Line 6 - %= cの値 = {0} 11 Line 7 - <<= cの値 = {0} 44 Line 8 - >>= cの値 = {0} 11 Line 9 - &= cの値 = {0} 2 Line 10 - ^= cの値 = 0 Line 11 - |= cの値 = {0} 2
以下のテーブルは、C#がサポートする他の重要な演算子を示しています。 sizeof、typeof および ? :。
演算子 | 説明 | 例 |
---|---|---|
sizeof() | データタイプのサイズを返します。 | sizeof(int),次に返されます 4. |
typeof() | classのタイプを返します。 | typeof(StreamReader); |
& | 変数のアドレスを返します。 | &a; 変数の実際のアドレスを取得します。 |
* | 変数のポインタ。 | *a; ある変数を指します。 |
? : | 条件表現 | 条件が真であればX、そうでなければY |
is | オブジェクトが特定のタイプであるかどうかを判断します。 | If(Ford is Car) // FordがCarクラスのオブジェクトであるかチェックします。 |
as | 強制変換、変換が失敗しても例外をスローしません。 | Object obj = new StringReader("Hello"); StringReader r = obj as StringReader; |
using System; namespace OperatorsAppl { class Program { 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 = 10; b = (a == 1) ? 20 : 30; Console.WriteLine("b の値は {0}", b); b = (a == 10) ? 20 : 30; Console.WriteLine("b の値は {0}", b); Console.ReadLine(); } } }
上記のコードがコンパイルされ実行されると、以下のような結果が得られます:
int のサイズは 4 short のサイズは 2 double のサイズは 8 b の値は 30 b の値は 20
演算子の優先順位は、式内の項の組み合わせを決定します。これは式がどのように計算されるかに影響を与えます。ある演算子は他の演算子よりも高い優先順位を持つことがあります。例えば、乗除演算子は加減演算子よりも高い優先順位を持っています。
たとえば x = 7 + 3 * 2ここでは、x が代入されます 13、ではなく 20、この演算子は * 持ちます + より高い優先順位を持つため、まず乗除法が計算されます 3*2、それに加えて 7。
以下の表は、演算子の優先順位を高いから低い順に示しています。優先順位が高い演算子は表の上に、優先順位が低い演算子は表の下に表示されます。式では、優先順位が高い演算子が優先して計算されます。
カテゴリー | 演算子 | 結合性 |
---|---|---|
後置 | () [] -> . ++ - - | 左から右 |
一元 | + - ! ~ ++ - - (type)* & sizeof | 右から左 |
乗除 | * / % | 左から右 |
加減 | + - | 左から右 |
シフト | << >> | 左から右 |
関係 | < <= > >= | 左から右 |
等しい | == != | 左から右 |
ビットと AND | & | 左から右 |
ビット排他または XOR | ^ | 左から右 |
ビットまたは OR | | | 左から右 |
論理と AND | && | 左から右 |
論理または OR | || | 左から右 |
条件 | ?: | 右から左 |
代入 | = += -= *= /= %=>>= <<= &= ^= |= | 右から左 |
コンマ | , | 左から右 |
using System; namespace OperatorsAppl { class Program { static void Main(string[] args) { int a = 20; int b = 10; int c = 15; int d = 5; int e; e = (a + b) * c / d; // ( 30 * 15 ) / 5 Console.WriteLine("(a + b) * c / d の値は {0}、e); e = ((a + b) * c) / d; // (30 * 15 ) / 5 Console.WriteLine("((a + b) * c) / d の値は {0}、e); e = (a + b) * (c / d); // (30) * (15/5) Console.WriteLine("(a + b) * (c / d) の値は {0}、e); e = a + (b * c) / d; // 20 + (150/5) Console.WriteLine("a + (b * c) / d の値は {0}、e); Console.ReadLine(); } } }
上記のコードがコンパイルされ実行されると、以下のような結果が得られます:
(a + b) * c / d の値は 90 ((a + b) * c) / d の値は 90 (a + b) * (c / d) の値は 90 a + (b * c) / d の値は 50