C# 演算子の優先順位と結合性
C# 演算子の優先順位と結合性
このチュートリアルでは、C# での演算子の優先順位と結合性について学習します。これにより、式が C# コンパイラによってどのように評価されるかがわかります。
C# 演算子の優先順位
演算子の優先順位は、式の評価方法を定義する一連のルールです。 C# では、各 C# 演算子に割り当てられた優先度があり、これらの優先度に基づいて式が評価されます。
例 、乗算の優先度 (*)
演算子は加算 (+)
の優先順位よりも高い オペレーター。したがって、乗算を伴う演算は加算の前に実行されます。
以下の声明を見てください。
int x = 4 + 3 * 5;
x の値はどうなりますか このステートメントを実行した後?
オペランド 3
+
に関連付けられています そして *
.前述のとおり、掛け算は足し算よりも優先されます。したがって、操作 3 * 5
4 + 3
の代わりに実行されます .変数 x の値 19
になります .
加算の優先度が高い場合、4 + 3
最初に評価され、x の値 35
になります .
演算子の優先順位表
演算子の優先度が高いほど、表の上位に表示されます
カテゴリ | 演算子 |
---|---|
後置インクリメントとデクリメント | ++, -- |
接頭辞のインクリメント、デクリメント、単項 | ++、--、+、-、!、~ |
乗法 | *, /, % |
添加剤 | +、- |
シフト | <<,>> |
リレーショナル | <, <=,>,>= |
平等 | ==, != |
ビットごとの AND | & |
ビット単位の XOR | ^ |
ビットごとの OR | | |
論理積 | && |
論理和 | || |
三項 | ? : |
任務 | =, +=, -=, *=, /=, %=, &=, |=, ^=, <<=,>>= |
代入演算子の優先順位は最も低く、後置インクリメントおよびデクリメント演算子の優先順位は最も高くなります。
例 1:演算子の優先順位
using System;
namespace Operator
{
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
プログラムで式がどのように評価されるかを理解しましょう。
--
の優先順位 と ++
*
より大きい 、および *
の優先順位 -
より大きい .したがって、
result1 = --a * b - ++c;
と同等です
result1 = ((--a)*b)-(++c);
括弧内の式は、外側の演算子の優先順位に関係なく、常に最初に評価されます。
- まず (--a) 評価され、結果は
4
になります .
- 次に(++c) 評価され、結果は
5
になります .
- さて、(a * b) 評価され、結果は
24
になります .
- 最後に、減算が実行され、結果は
19
になります .
- したがって、result1 の最終値
19
になります .
次の式では、+
の優先順位 >=
より大きい .だから、c そしてa が最初に追加され、合計が b と比較されます false
を生成する .
C# における演算子の結合性
前のセクションでは、演算子の優先順位について説明しました。優先順位の異なる 2 つの演算子が使用されている場合、優先順位の高い演算子が最初に評価されます。
しかし、両方の演算子の優先順位が同じ場合はどうなるでしょうか?
このような場合、式は演算子の結合性 (左から右または右から左) に基づいて評価されます。
例:
int a = 5, b = 6, c = 3; int result = a * b / c;
ここでは、両方の *
と /
優先度は同じです。しかし、これらの演算子の結合性は 左から右へ であるため、 、 a * b
が最初に評価され、次に除算が実行されます。この式の最終結果は 10
になります .
この特定の例では、結合性はあまり重要ではありません。掛け算の前に割り算をしても結果に影響しないからです。
別の例を見てみましょう。
int a = 5, b = 6, c = 3; a = b = c;
=
の結合性 演算子は右から左へ .したがって、c の値は (例:3
) は b に割り当てられます 、次に b の値 a に割り当てられています .したがって、このステートメントを実行した後、a の値は 、b と c 3
になります .
次の表は、C# 演算子の結合性を示しています:
カテゴリ | 演算子 | 連想性 |
---|---|---|
後置インクリメントとデクリメント | ++, -- | 左から右 |
接頭辞のインクリメント、デクリメント、単項 | ++、--、+、-、!、~ | 右から左 |
乗法 | *, /, % | 左から右 |
添加剤 | +、- | 左から右 |
シフト | <<,>> | 左から右 |
リレーショナル | <, <=,>,>= | 左から右 |
平等 | ==, != | 左から右 |
ビットごとの AND | & | 左から右 |
ビット単位の XOR | ^ | 左から右 |
ビットごとの OR | | | 左から右 |
論理積 | && | 左から右 |
論理和 | || | 左から右 |
三項 | ? : | 右から左 |
任務 | =, +=, -=, *=, /=, %=, &=, |=, ^=, <<=,>>= | 右から左 |
ほとんどすべての演算子には、左から右への結合性があります。右から左に結合性を持つ演算子は次のとおりです:
- 単項演算子
- インクリメント演算子とデクリメント演算子の接頭辞
- 三項演算子
- 代入演算子
例 2:演算子の結合性
using System;
namespace Operator
{
class OperatorPrecedence
{
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 = {0}, b = {1}, c = {2}", a, b, c);
}
}
}
プログラムを実行すると、出力は次のようになります:
10 a = 3, b = 3, c = 3
C言語