演算子

C#で使える演算子まとめ

今回は、C#で使える演算子をまとめました。

算術演算子

算術演算子は、数値に対して足し算・引き算・掛け算・割り算などを行う演算子です。

以下のような種類があります。

  • +(加算)
  • (減算)
  • *(乗算)
  • /(除算)
  • %(剰余)
  • ++(インクリメント)
  • (デクリメント)

例として、加算や減算を行うサンプルコードを示します。

実行結果

sum: 13
diff: 7
product: 30
quotient: 3
remainder: 1
x: 11
y: 2

代入演算子

代入演算子は、変数に値を代入するときに使います。

単純な代入(=)だけでなく、加算代入(+=)や減算代入(-=)など複合代入演算子も利用できます。

また、??=(null合体代入演算子)は変数がnullの場合のみ値を代入します。

以下のコードは複合代入演算子とnull合体代入演算子の例です。

実行結果

a: 3
text: default

比較(リレーショナル)演算子

値同士を比較して、等しいかどうか・大小関係などを判定するときに使うのが比較演算子です。

  • ==(等価)
  • !=(非等価)
  • <(より小さい)
  • >(より大きい)
  • <=(以下)
  • >=(以上)

以下にサンプルコードを示します。

実行結果

合格ラインを超えています

論理演算子

論理演算子は、ブール型(true/false)を扱うときに使用します。

  • &&(論理AND)
  • ||(論理OR)
  • !(論理NOT)

以下の例では、年齢と登録状況を条件にしています。

実行結果

利用できます
アクティブではありません

ビット演算子

ビット演算子は、整数のビット単位で演算を行うものです。

  • &(ビットAND)
  • |(ビットOR)
  • ^(ビットXOR)
  • ~(ビットNOT)
  • <<(左シフト)
  • >>(右シフト)

以下の例では、AND演算子とシフト演算子を用いたコードを示します。

実行結果

andResult: 8
shiftedLeft: 8
shiftedRight: 4

条件(3項)演算子

条件演算子(?:)は、条件によって値を切り替える際に使われます。

if文よりも簡潔に表現できる場合に便利です。

実行結果

不合格

null 関連演算子

null関連演算子は、変数がnullかどうかを簡単に判定したり、nullの場合に代替値を返したりするのに利用します。

  • ??(null合体演算子)
  • ?.(null条件演算子)
  • ??=(null合体代入演算子、前述)

次のコードは、入力値がnullの場合に代替文字列を使用する例です。

実行結果

output: 未入力
length: null

型演算子

型演算子は、オブジェクトが特定の型かどうか調べたり、型情報を取得したりするときに使います。

  • is
  • as
  • typeof
  • nameof
  • default
  • sizeof

以下のコードはis演算子を使った例です。

実行結果

これは文字列です。
変換後の文字列: Hello C#

その他の演算子

C#には、上記以外にも以下のような演算子があります。

  • new(インスタンス生成)
  • =>(ラムダ演算子)
  • .(メンバーアクセス演算子)
  • ->(ポインタメンバーアクセス演算子、アンセーフコードで使用)
  • await(非同期メソッド内での待機)
  • checked / unchecked(算術演算のオーバーフロー検出)

次の例ではラムダ式を用いて、渡された数値を二乗にする処理を表しています。

実行結果

25

注意点

演算子には優先順位結合規則があり、複雑な式を書く場合は意図しない順序で評価されないように括弧を使うと安全です。

インクリメントやデクリメントなど、一部の演算子は前置(++i)と後置(i++)で挙動が異なるため注意が必要です。

nullを扱う演算子はコードを簡潔にしますが、設計時点でのnullチェックの方針を明確にするとスムーズです。

数値のオーバーフローが懸念される場合、checked/uncheckedを活用してエラーを検出できる状態にしておくと安心です。

まとめ

C#では、多様な演算子が用意されており、それぞれの目的に応じた使い分けが必要です。

演算子の特性や副作用、優先順位を把握しておくと、意図通りの処理を実装できます。

保守性と読みやすさを念頭に、適切な演算子を選択してコーディングを行いましょう。