web-dev-qa-db-ja.com

演算子の結合性とは何ですか?なぜ重要なのですか?

結合性とは(オペレーターにとって)、なぜ重要なのですか?

更新:演算子の結合性

78

演算子の場合、結合性とは、同じ演算子が行に表示されたときに、最初に適用される演算子の出現を意味します。以下では、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種類があります。

数学の連想プロパティ

プログラミング言語の操作の順序

CPUキャッシュの関連性。

数学の連想プロパティは、加算(+)などの演算子のプロパティです。このプロパティを使用すると、ステートメントの値を変更せずに括弧を再配置できます。

(a + b) + c = a + (b + c)

プログラミング言語では、演算子の結合性(または固定性)は、同じ優先順位の演算子を括弧のabsenceにグループ化する方法を決定するプロパティです。すなわち、各演算子が評価される順序。これはプログラミング言語によって異なる場合があります。

CPUキャッシュでは、結合性はパフォーマンスを最適化する方法です。

11
Robert Harvey

同じ優先順位の演算子の評価の順序です。 LEFT TO RIGHTまたはRIGHT TO LEFTの順序が重要です。ために

3 - 2 - 1

左から右の場合、

(3 - 2) - 1

そして0です。右から左の場合、

3 - (2 - 1)

ほとんどの言語では、マイナス演算子は左から右への結合性を持っていると言います。

「演算子の結合性」を参照している場合-括弧がない場合に、同じ優先順位の演算子をグループ化する方法が言語によって決定される方法です。

たとえば、Cベースの言語の+および-演算子の優先順位は同じです。両方を(括弧なしで)使用する式を記述する場合、コンパイラーはそれらを評価する順序を決定する必要があります。

12-5 + 3と書くと、可能な評価は次のとおりです。

  1. (12-5)+ 3 = 10
  2. 12-(5 + 3)= 4

式を評価する順序に応じて、異なる結果を得ることができます。 Cベースの言語では、+と-には結合性が残っています。つまり、上記の式は最初のケースとして評価されます。

すべての言語には、優先順位と結合性の両方について厳密に定義されたルールがあります。 C# のルールの詳細については、こちらをご覧ください。演算子 結合性 および precedence の一般的な概念は、ウィキペディアで十分に説明されています。

5
LBushkin

シンプル!!

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)==>未定義の動作

これが役立つことを願っています。

4
Deepak

私はあなたが演算子の結合性を意味すると仮定します...

オペランドを演算子にバインドする順序です。基本的に:

a-b + c

評価される可能性があります(-と+が同じ優先順位を持っていると仮定):

((a-b)+ c)または、
(a-(b + c))

演算子が結合されたままである場合(左側のオペランドにすぐにバインドされる)、最初の演算子として評価されます。それらが正しい連想であれば、2番目として評価されます。

2
Mehrdad Afshari

演算子の結合性を意味する場合:

式の解析方法を定義します。これは標準を提供するため、すべての式は同じ方法で解析されます。

これは、副作用が発生する可能性がある場合に、前例が同じ操作で最も重要です。

1
Ikke

前の例のほとんどは定数を使用しています。引数がたまたま関数呼び出しである場合、呼び出しが行われる順序は、コンパイラーに応じて、関連付けルールによって決定される場合があります。そして、それらの機能に副作用がある場合..

0
JustJeff

優先順位が重要であることは誰もが知っていますが、式の意味を解釈する際の結合性も重要です。本当に簡単な紹介のために Power of Operators を試してください。

0
user138512