式
算術演算子
演算子 | 説明 | 使い方 |
---|---|---|
+ | 単項プラス | +a |
- | 単項マイナス | -a |
+ | 加算 | a + b |
- | 減算 | a - b |
* | 乗算 | a * b |
/ | 除算 | a / b |
% | 剰余 | a % b |
演算子の優先順位は一般の四則演算と同じです。
優先順位を変えるには括弧 (...) を使えば OK です。
1 + 2 * 3 // 7
(1 + 2) * 3 // 9
整数型同士の除算は常に切り捨てられます。
ただし,少なくとも一方のオペランドが実数型であれば,型の昇格によって結果は実数値となります。
10 / 3 // 3
10.0 / 3 // 3.333...
10 / 3.0 // 3.333...
関係演算子
演算子 | 説明 | 使い方 |
---|---|---|
== | 等値 | a == b |
!= | 非等値 | a != b |
> | 大なり | a > b |
< | 小なり | a < b |
>= | 以上 | a >= b |
<= | 以下 | a <= b |
C# の == 演算子は,値型については値,参照型については参照の等価性を評価します。
ただし,== 演算子がオーバーロードされていれば,参照型であっても値の等価性を評価します (string 型など)。
string s = "hello";
string t = string.Copy(s); // s の複製を作成
Console.WriteLine(s == t); // 出力: True
Console.WriteLine(object.ReferenceEquals(s, t)); // 出力: False
論理演算子
演算子 | 説明 | 使い方 |
---|---|---|
&& | AND (短絡評価) | a && b |
& | AND | a & b |
|| | OR (短絡評価) | a || b |
| | OR | a | b |
! | NOT | !a |
&& 演算子,|| 演算子は短絡評価を行います。
ビット演算子
ビット演算用の演算子です。
演算子 | 説明 | 使い方 |
---|---|---|
& | AND | a & b |
^ | XOR | a ^ b |
| | OR | a | b |
~ | NOT | ~a |
<< | 左シフト | a << b |
>> | 右シフト | a >> b |
インクリメント/デクリメント
インクリメント演算子 ++ は変数の値を 1 だけ増やす演算子です。
デクリメント演算子 -- は変数の値を 1 だけ減らす演算子です。
演算子を前置した場合は増減後の値を,後置した場合は増減前の値を評価結果とします。
式 | n の値 (初期値 2) | a の値 |
---|---|---|
a = ++n; | 3 | 3 |
a = n++; | 3 | 2 |
a = --n; | 1 | 1 |
a = n--; | 1 | 2 |
代入演算子
代入演算子 = は右から左へ評価されます。
例えば a = b = c という式は,c から b への代入の後,a への代入を行います。
各種複合代入演算子 op= (+=, *=, ...) も用意されています。
キャスト
型変換を行うキャスト演算子は,(int) のように (型名) と書きます。
double から int への変換のように,情報の欠落が生じうる変換は,暗黙的には行われません。
キャストによる明示的な型変換が必要となります。
double d = 3.14;
int n = (int) d;
as/is 演算子
参照型の型変換には as 演算子を使うこともできます。
型の変換可能性については is 演算子によって調べられます。
object o = "hello";
if (o is string) // o が string 型に変換可能ならば
string s = o as string; // o を string 型に変換
変換不能な型変換を実行した際,キャストでは例外が発生するが,as 演算子では評価結果が null になるという違いがあります。
条件演算子
条件演算子 ?: は,条件式 ? 式1 : 式2 という形で用いる三項演算子です。
条件式が真の場合には 式1 を,偽の場合には 式2 を評価結果とします。
max = a > b ? a : b; // a > b が真ならば a, 偽ならば b を代入