質問
(演算子にとって) 結合性とは何ですか?また、なぜそれが重要なのでしょうか?
更新しました: 演算子の結合性
解決
演算子の場合、結合性とは、同じ演算子が行に出現したときに、どの演算子が最初に出現するかを意味します。以下では、 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)
プログラミング言語では、演算子の結合性 (または固定性) は、同じ優先順位の演算子が言語内でどのようにグループ化されるかを決定するプロパティです。 不在 括弧の;つまり各演算子が評価される順序。これはプログラミング言語によって異なる場合があります。
CPU キャッシュでは、結合性がパフォーマンスを最適化する方法です。
これは、同じ優先順位の演算子を評価する順序です。左から右、または右から左の順序が重要です。のために
3 - 2 - 1
左から右の場合は、
(3 - 2) - 1
そして0です。右から左の場合は、
3 - (2 - 1)
そしてそれは2です。ほとんどの言語では、マイナス演算子には左から右への結合性があると言われます。
「演算子の結合性」について言及している場合、括弧がない場合に同じ優先順位の演算子をグループ化する方法を言語が決定する方法です。
たとえば、C ベース言語の + 演算子と - 演算子は同じ優先順位を持ちます。両方を使用する式を (かっこなしで) 作成する場合、コンパイラーはそれらを評価する順序を決定する必要があります。
12 - 5 + 3 と書くと、次のような評価が考えられます。
- (12 - 5) + 3 = 10
- 12 - (5 + 3) = 4
式を評価する順序に応じて、異なる結果が得られる可能性があります。C ベースの言語では、+ と - には結合性が残っています。つまり、上記の式は最初のケースとして評価されます。
すべての言語には、優先順位と結合性の両方に関して厳密に定義されたルールがあります。ルールについて詳しく知ることができます C# ここ。演算子の一般概念 結合性 そして 優先順位 ウィキペディアでよく取り上げられています。
単純!!
左連想 式を左から右に評価することを意味します
右連想 式を右から左に評価することを意味します
*、/、% の優先順位は同じであることはわかっていますが、結合性に従って、答えは変わる可能性があります。
たとえば:次のような式があります。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 番目として評価されます。
演算子の結合性を意味する場合:
式を解析する方法を定義します。これにより標準が与えられるため、すべての式が同じ方法で解析されます。
これは、同じ優先順位を持つ操作で副作用が発生する可能性がある場合に最も重要です。
前の例のほとんどでは定数を使用しました。引数がたまたま関数呼び出しである場合、呼び出しが行われる順序は、もちろんコンパイラに応じて、関連付けルールによって決定される可能性があります。そして、それらの関数に副作用がある場合は...
優先順位が重要であることは誰もが知っていますが、式の意味を解釈する際には結合性も重要です。本当に簡単なイントロを試してみましょう オペレーターの力.