結合性とは(オペレーターにとって)、なぜ重要なのですか?
更新:演算子の結合性
演算子の場合、結合性とは、同じ演算子が行に表示されたときに、最初に適用される演算子の出現を意味します。以下では、Q
を演算子とします
a Q b Q c
Q
が連想型のままの場合、次のように評価されます。
(a Q b) Q c
そして、それが正しい連想であれば、次のように評価されます
a Q (b Q c)
それは式の意味を変えるので重要です。整数算術の除算演算子を考えてみましょう。
4 / 2 / 3 <=> (4 / 2) / 3 <=> 2 / 3 = 0
もしそれが正しい連想であれば、ゼロで除算するため、未定義の式に評価されます。
4 / 2 / 3 <=> 4 / (2 / 3) <=> 4 / 0 = undefined
結合性には次の3種類があります。
数学の連想プロパティは、加算(+)などの演算子のプロパティです。このプロパティを使用すると、ステートメントの値を変更せずに括弧を再配置できます。
(a + b) + c = a + (b + c)
プログラミング言語では、演算子の結合性(または固定性)は、同じ優先順位の演算子を括弧のabsenceにグループ化する方法を決定するプロパティです。すなわち、各演算子が評価される順序。これはプログラミング言語によって異なる場合があります。
CPUキャッシュでは、結合性はパフォーマンスを最適化する方法です。
同じ優先順位の演算子の評価の順序です。 LEFT TO RIGHTまたはRIGHT TO LEFTの順序が重要です。ために
3 - 2 - 1
左から右の場合、
(3 - 2) - 1
そして0です。右から左の場合、
3 - (2 - 1)
ほとんどの言語では、マイナス演算子は左から右への結合性を持っていると言います。
「演算子の結合性」を参照している場合-括弧がない場合に、同じ優先順位の演算子をグループ化する方法が言語によって決定される方法です。
たとえば、Cベースの言語の+および-演算子の優先順位は同じです。両方を(括弧なしで)使用する式を記述する場合、コンパイラーはそれらを評価する順序を決定する必要があります。
12-5 + 3と書くと、可能な評価は次のとおりです。
式を評価する順序に応じて、異なる結果を得ることができます。 Cベースの言語では、+と-には結合性が残っています。つまり、上記の式は最初のケースとして評価されます。
すべての言語には、優先順位と結合性の両方について厳密に定義されたルールがあります。 C# のルールの詳細については、こちらをご覧ください。演算子 結合性 および precedence の一般的な概念は、ウィキペディアで十分に説明されています。
シンプル!!
Left Associativeは、式を左から右に評価することを意味します
Right Associativeは、式を右から左に評価することを意味します
*、/、および%が同じ優先順位を持っていることはわかっていますが、アソシエティビティごとに、回答が変わる場合があります
例えば:式があります:4 * 8/2%5
左の結合:(4 * 8)/ 2%5 ==>(32/2)%5 ==> 16%5 ==> 1
右結合: 4 * 8 /(2%5)==> 4 *(8/0)==>未定義の動作
これが役立つことを願っています。
私はあなたが演算子の結合性を意味すると仮定します...
オペランドを演算子にバインドする順序です。基本的に:
a-b + c
評価される可能性があります(-と+が同じ優先順位を持っていると仮定):
((a-b)+ c)または、
(a-(b + c))
演算子が結合されたままである場合(左側のオペランドにすぐにバインドされる)、最初の演算子として評価されます。それらが正しい連想であれば、2番目として評価されます。
演算子の結合性を意味する場合:
式の解析方法を定義します。これは標準を提供するため、すべての式は同じ方法で解析されます。
これは、副作用が発生する可能性がある場合に、前例が同じ操作で最も重要です。
前の例のほとんどは定数を使用しています。引数がたまたま関数呼び出しである場合、呼び出しが行われる順序は、コンパイラーに応じて、関連付けルールによって決定される場合があります。そして、それらの機能に副作用がある場合..
優先順位が重要であることは誰もが知っていますが、式の意味を解釈する際の結合性も重要です。本当に簡単な紹介のために Power of Operators を試してください。