C#: 演算子と式

1. 算術演算子

算術演算子は、加算、減算、乗算、除算、剰余などの基本的な数学演算を実行します。

演算子 名前 結果
+ 追加 5 + 3 8
- 引き算 5 - 3 2
* 掛け算 5 * 3 15
/ 部門 7 / 2 3
% モジュラス 7 % 2 1

警告:整数除算では小数部が切り捨てられます。 7 / 2 の結果は 3 となり、3.5 にはなりません。浮動小数点数の結果を得るには、少なくとも一方のオペランドが浮動小数点型である必要があります。例えば、7.0 / 2 の結果は 3.5 となります。

▶ サンプル

CSHARP
using System;

class Program
{
    static void Main()
    {
        int a = 17, b = 5;

        Console.WriteLine($"Addition: {a} + {b} = {a + b}");
        Console.WriteLine($"Subtraction: {a} - {b} = {a - b}");
        Console.WriteLine($"Multiplication: {a} * {b} = {a * b}");
        Console.WriteLine($"Integer division: {a} / {b} = {a / b}");
        Console.WriteLine($"Floating-point division: {a * 1.0} / {b} = {a * 1.0 / b}");
        Console.WriteLine($"Modulus: {a} % {b} = {a % b}");
    }
}
▶ 試してみよう
TEXT 📖 参照専用
Addition: 17 + 5 = 22
Subtraction: 17 - 5 = 12
Multiplication: 17 * 5 = 85
Integer division: 17 / 5 = 3
Floating-point division: 17 / 5 = 3.4
Modulus: 17 % 5 = 2

2. インクリメント演算子とデクリメント演算子

インクリメント演算子 ++ とデクリメント演算子 -- は、変数の値を 1 増減させます。接頭辞形式では、値を使用する前に変更を行い、接尾辞形式では、まず値を使用してから変更を行います。

演算子 名称 説明
++x 接頭辞のインクリメント 1 ずつ増やしてからその値を使用する
x++ 末尾加算 値を使用し、その後1を加算する
--x プレフィックス減算 1を減算してから、その値を使用する
x-- 末尾減算 値を使用し、その後1を減算する

▶ サンプル

CSHARP
using System;

class Program
{
    static void Main()
    {
        int x = 10;
        int y = 10;

        Console.WriteLine($"Prefix increment: ++x = {++x}, x = {x}");
        Console.WriteLine($"Postfix increment: y++ = {y++}, y = {y}");

        int m = 5;
        int n = 5;

        Console.WriteLine($"Prefix decrement: --m = {--m}, m = {m}");
        Console.WriteLine($"Postfix decrement: n-- = {n--}, n = {n}");
    }
}
▶ 試してみよう
TEXT 📖 参照専用
Prefix increment: ++x = 11, x = 11
Postfix increment: y++ = 10, y = 11
Prefix decrement: --m = 4, m = 4
Postfix decrement: n-- = 5, n = 4

3. 関係演算子

関係演算子は2つの値を比較し、boolの結果(trueまたはfalse)を返します。

演算子 名前 結果
== 等しい 5 == 5 true
!= 異なる 5 != 3 true
< 未満 3 < 5 true
> より大きい 5 > 3 true
<= 以下 5 <= 5 true
>= 以上 5 >= 6 false

ヒント:=(代入)と==(等価性チェック)を混同しないでください。ifの条件式内で=を使用すると、コンパイルエラーや論理的なバグが発生します。


4. 論理演算子

論理演算子はブール式を結合します。C# では、&& および || が短絡評価とともに使用されます。これは、結果がすでに決定している場合、2 番目のオペランドは評価されないことを意味します。

演算子 名称 説明
&& 論理AND a && b 両方が真の場合に真(短絡評価)
` ` 論理OR
! 論理NOT !a 値を反転させる

警告:C#での論理演算には && および || を使用してください。& および | は使用しないでください。後者はビット演算子であり、ブール値に対しても演算を行えますが、短絡評価を行いません。

▶ サンプル

CSHARP
using System;

class Program
{
    static void Main()
    {
        int age = 25;
        bool hasLicense = true;

        bool canDrive = age >= 18 && hasLicense;
        Console.WriteLine($"Can drive: {canDrive}");

        bool isWeekend = false;
        bool isHoliday = true;
        bool dayOff = isWeekend || isHoliday;
        Console.WriteLine($"Day off: {dayOff}");

        bool isRaining = true;
        Console.WriteLine($"Not raining: {!isRaining}");
    }
}
▶ 試してみよう
TEXT 📖 参照専用
Can drive: True
Day off: True
Not raining: False

5. 代入演算子

代入演算子は、変数に値を代入します。複合代入演算子は、演算と代入を1つのステップにまとめます。

演算子 相当する式
= x = 10
+= x = x + y x += 5
-= x = x - y x -= 3
*= x = x * y x *= 2
/= x = x / y x /= 4
%= x = x % y x %= 3

6. 条件演算子

条件演算子 ?: は、C# で唯一の三項演算子です。これは、条件に基づいて 2 つの値のうちの 1 つを返します。

構文:condition ? valueIfTrue : valueIfFalse

▶ サンプル

CSHARP
using System;

class Program
{
    static void Main()
    {
        int score = 72;
        string result = score >= 60 ? "Pass" : "Fail";
        Console.WriteLine($"Score {score}: {result}");

        int a = 15, b = 9;
        int max = a > b ? a : b;
        Console.WriteLine($"Larger value: {max}");
    }
}
▶ 試してみよう
TEXT 📖 参照専用
Score 72: Pass
Larger value: 15

7. ヌル結合演算子

?? 演算子は、左辺のオペランドが null の場合、右辺のオペランドを返し、それ以外の場合は左辺の値を返します。 ??= 演算子(C# 8)は、変数が null の場合にのみ値を代入する null 結合代入演算子です。

CSHARP
using System;

class Program
{
    static void Main()
    {
        string name = null;
        string display = name ?? "Anonymous";
        Console.WriteLine($"Name: {display}");

        int? count = null;
        int total = count ?? 0;
        Console.WriteLine($"Total: {total}");

        string title = null;
        title ??= "Default Title";
        Console.WriteLine($"Title: {title}");

        title ??= "New Title";
        Console.WriteLine($"Title: {title}");
    }
}
TEXT 📖 参照専用
Name: Anonymous
Total: 0
Title: Default Title
Title: Default Title

8. ヌル条件演算子

?. 演算子は、メンバーにアクセスする前に、オブジェクトが null かどうかを確認します。オブジェクトが null の場合、この式は NullReferenceException をスローするのではなく、null を返します。

CSHARP
using System;

class Program
{
    static void Main()
    {
        string text = "Hello C#";
        Console.WriteLine($"Length: {text?.Length}");

        text = null;
        Console.WriteLine($"Length: {text?.Length}");

        int? len = text?.Length;
        Console.WriteLine($"Type: {len?.GetType().Name ?? "null"}");
    }
}
TEXT 📖 参照専用
Length: 8
Length:
Type: null

9. 演算子の優先順位

以下の表は、C# でよく使われる演算子を、優先順位の高い順から低い順に並べたものです。同じ行にある演算子は、優先順位が同じです。

優先度 演算子 説明
1 x++ x-- . ?. () [] ポストフィックス、メンバーアクセス
2 ++x --x +x -x ! ~ 接頭辞、単項
3 * / % 乗法
4 + - 添加剤
5 < > <= >= is as リレーショナル、型チェック
6 == != 平等
7 && 論理AND
8 `
9 ?? ??= ヌル結合
10 ?: 条件付き
11 = += -= *= /= %= など 課題

ヒント:演算の優先順位がわからない場合は、括弧 () を使って評価順序を明確にしてください。これにより、エラーを防ぎ、可読性を高めることができます。

❓ よくある質問

Q 整数除算と浮動小数点除算の違いは何ですか?
A 整数除算では小数部分が切り捨てられます。例えば、7 / 23 になります。 浮動小数点除算では小数部分が保持されます。例えば、7.0 / 2 の結果は 3.5 となります。
Q ++xx++ の違いは何ですか?
A ++x はまず値をインクリメントしてから新しい値を返します。一方、x++ は現在の値を返してからインクリメントします。 単独の文では動作は同じですが、式の中では結果が異なります。
Q &&& の違いは何ですか?
A && は、左側のオペランドが偽の場合、右側のオペランドをスキップする短絡論理ANDです。 &はビット単位のAND演算子であり、ブール値に対しても演算を行えますが、常に両側の値を評価します。
Q ???.は、それぞれどのような場合に使用すべきですか?
A ??は、nullの場合のデフォルト値を指定するために使用します。?.は、nullになる可能性のあるオブジェクトのメンバに安全にアクセスし、NullReferenceExceptionを回避するために使用します。

📖 まとめ

📝 練習問題

  1. 整数除算の切り捨て挙動を確認しつつ、7 / 2 および 7.0 / 2 を計算し、その結果を出力するプログラムを作成してください。
  2. 式における ++xx++ の違いを示すプログラムを作成してください。int a = 5 を設定し、++a * 3a++ * 3 をそれぞれ計算して、その結果を出力してください。
  3. 条件演算子を使用して、整数が正、0、または負のいずれであるかを判定するプログラムを作成してください(ネストは許可されます ?:)。
  4. string 変数を null に設定して作成し、???. を使用してそのデフォルト値を出力し、その長さを安全に取得するプログラムを作成してください。
  5. 2 + 3 * 4(2 + 3) * 4 を評価するプログラムを作成し、括弧が優先順位にどのように影響するかを示してください。
Web-Tutorial.com

Web-Tutorial 技術チーム

複数の開発者によって共同維持されているプログラミングチュートリアルプラットフォーム。各チュートリアルは専門分野の開発者が執筆・レビューしています。正確で信頼性の高いコンテンツを目指しています — 問題を見つけた場合はお知らせください。

100%