C#の演算子の優先順位とは?基本ルールとサンプルコードで解説
演算子とは
演算子(オペレーター)とは、コンパイラに対して特定の数学的処理や論理処理を実行するよう指示するための記号です。C#には、算術演算子・関係演算子・論理演算子など、さまざまな種類の演算子が用意されています。
演算子の優先順位とは
演算子の優先順位とは、1つの式の中で各項がどのようにグループ化され、どの順番で評価されるかを決めるルールです。この優先順位は式の評価結果に直接影響します。すべての演算子が同じ優先順位を持つわけではなく、たとえば乗算演算子(*)は加算演算子(+)よりも高い優先順位を持ちます。
そのため、a + b * c という式は (a + b) * c ではなく a + (b * c) として評価されます。計算の順序を明示的に指定したい場合は、括弧( )を使用します。
サンプルコード
以下は、C#における演算子の優先順位の挙動を確認できるサンプルプログラムです。
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
このように、括弧の位置によって同じ数値を使っても計算結果が変わることがあります。特に最後の式では、乗算が除算・加算よりも先に評価されるため、結果が 50 になっています。
主な演算子の優先順位一覧
C#の主な演算子は、優先順位の高いものからおおむね次の順に評価されます。同じ優先順位の演算子は、結合規則に従って左または右から評価されます。
| 優先順位 | 演算子 | 結合規則 |
|---|---|---|
| 高 | () (括弧) | ― |
| ↑ | ++ -- ! ~ 単項+ 単項- (キャスト) | 右から左 |
| * / % | 左から右 | |
| + - | 左から右 | |
| << >> | 左から右 | |
| < > <= >= is as | 左から右 | |
| == != | 左から右 | |
| && | 左から右 | |
| || | 左から右 | |
| 低 | ?: = += -= など(代入系) | 右から左 |
まとめ
演算子の優先順位を正しく理解することで、意図しない計算結果を防ぐことができます。複雑な式を書く場合は、括弧を活用して評価順序を明確にすると、コードの可読性と保守性の両方が向上します。
-
10.0.0.1とは?プライベートIPアドレスの意味とログイン方法・トラブル対処法
10.0.0.1は、クライアントデバイスに割り当てられたり、ネットワーク機器のデフォルトIPアドレスとして設定されたりする、プライベートIPアドレスです。 10.0.0.1とは? 10.0.0.1は、家庭向けネットワークよりも企業向けコンピューターネットワークでよく見られるIPアドレスです。家庭用ルーターでは通常、192.168.1.1や192.168.0.1など、192.168.x.x系のアドレスが使われます。ただし、家庭内のデバイスに10.0.0.1が割り当てられることもあり、その場合も他のIPアドレスとまったく同じように機能します。 クライアントデバイスが10.0.0.xの範囲(例:1
-
Pythonの&=演算子とは?ビット演算とインプレース代入の仕組みを解説
&=演算子の正体:object.__iand__()メソッドPythonにおける &= 演算子は、object.__iand__() メソッドに対するシンタックスシュガー(糖衣構文)です。公式ドキュメントには以下のように記載されています。「これらのメソッドは、拡張代入演算子(+=、-=、*=、@=、/=、//=、%=、**=、<<=、>>=、&=、^=、|=)を実装するために呼び出されます。これらのメソッドは、可能な限りインプレース(self自身を直接変更する形)で操作を行い、その結果を返すことが求められます(返り値はselfである必要はありませ