C# 演算子の優先順位と結合規則をマスターする:実践ガイド
C# 演算子の優先順位と結合規則をマスターする
この詳細なチュートリアルでは、C# コンパイラが演算子の優先順位と結合規則を適用して式を評価する仕組みを解説します。明確な例とリファレンステーブルで学習できます。
C# における演算子の優先順位
演算子の優先順位は、式のどの部分が最初に評価されるかを定義します。各 C# 演算子には固定の優先度レベルがあり、コンパイラが式を一貫して処理できるようになっています。
たとえば、乗算演算子 * は加算演算子 + よりも高い優先順位を持ちます。したがって、次の式では:
int x = 4 + 3 * 5;
乗算が最初に実行され、x = 19 となります。
もし加算が乗算より優先されるなら結果は 35 になりますが、C# は確立された優先順位階層に従います。
演算子の優先順位テーブル
以下の表は、演算子を優先順位の高い順から低い順に並べています。
| カテゴリ | 演算子 |
|---|---|
| 後置インクリメント/デクリメント | ++, -- |
| 前置インクリメント/デクリメントおよび単項演算子 | ++, --, +, -, !, ~ |
| 乗算系 | *, /, % |
| 加算系 | +, - |
| シフト | <<, >> |
| 関係演算子 | <, <=, >, >= |
| 等価演算子 | ==, != |
| ビット単位 AND | & |
| ビット単位 XOR | ^ |
| ビット単位 OR | | |
| 論理 AND | && |
| 論理 OR | || |
| 条件演算子(三項演算子) | ? : |
| 代入演算子 | =, +=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>= |
代入演算子が最も優先順位が低く、後置インクリメント/デクリメントが最も高くなっています。
例 1:演算子の優先順位
using System;
namespace OperatorDemo {
class OperatorPrecedence {
public static void Main(string[] args) {
int result1;
int a = 5, b = 6, c = 4;
result1 = --a * b - ++c;
Console.WriteLine(result1);
bool result2;
result2 = b >= c + a;
Console.WriteLine(result2);
}
}
}
このプログラムを実行すると以下が出力されます:
19 False
評価手順:
(--a)→ 4 (a は 4 になる)(++c)→ 5 (c は 5 になる)(a * b)→ 24- 減算:24 - 5 = 19
2 番目の式では、加算 + が比較演算子 >= より優先順位が高いため、c + a が先に評価されます。
C# における演算子の結合規則
2 つの演算子が同じ優先順位を持つ場合、コンパイラは結合規則を使って評価順序を決めます。ほとんどの C# 演算子は左から右への結合ですが、一部は右から左です。
例:
int a = 5, b = 6, c = 3; int result = a * b / c;
* と / は左から右への結合なので、乗算が最初に実行され、結果は 10 になります。
右から左への結合は、代入の連鎖で重要です:
int a = 5, b = 6, c = 3; a = b = c;
値 3 が b に代入され、次に b が a に代入されるため、すべての変数が 3 を保持します。
以下の表は C# 演算子の結合規則をまとめたものです。
| カテゴリ | 演算子 | 結合規則 |
|---|---|---|
| 後置インクリメント/デクリメント | ++, -- | 左から右 |
| 前置インクリメント/デクリメントおよび単項演算子 | ++, --, +, -, !, ~ | 右から左 |
| 乗算系 | *, /, % | 左から右 |
| 加算系 | +, - | 左から右 |
| シフト | <<, >> | 左から右 |
| 関係演算子 | <, <=, >, >= | 左から右 |
| 等価演算子 | ==, != | 左から右 |
| ビット単位 AND | & | 左から右 |
| ビット単位 XOR | ^ | 左から右 |
| ビット単位 OR | | | 左から右 |
| 論理 AND | && | 左から右 |
| 論理 OR | || | 左から右 |
| 条件演算子(三項演算子) | ? : | 右から左 |
| 代入演算子 | =, +=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>= | 右から左 |
主要な右から左への結合を持つ演算子には、前置単項演算子、条件演算子、すべての代入演算子が含まれます。
例 2:結合規則の実践
using System;
namespace OperatorDemo {
class OperatorAssociativity {
public static void Main(string[] args) {
int a = 5, b = 6, c = 3;
int result = a * b / c;
Console.WriteLine(result);
a = b = c;
Console.WriteLine($"a = {a}, b = {b}, c = {c}");
}
}
}
出力は以下の通りです:
10 a = 3, b = 3, c = 3
C言語
- C# キーワードと識別子:ルール、一覧、ベストプラクティス完全ガイド
- C#演算子完全ガイド:C#における演算子の包括的解説
- C# 三項演算子:条件式を簡潔に書くためのガイド
- C# クラスとオブジェクト:堅牢な OOP の基礎
- C# 抽象クラスと抽象メソッドをマスターする:実践ガイド
- C# 部分クラスと部分メソッドを理解する
- C# sealed クラスとメソッドをマスターする:使用判断、実例、コードの安全性とパフォーマンス向上
- C++演算子を徹底解説:種類、例、サンプルプログラム付き
- C言語の定数とリテラル:型、使い方、ベストプラクティス
- C言語の入出力マスター:標準関数とファイル操作
- C++日付と時刻の完全ガイド:ctimeライブラリの活用