97

(演算子の)結合性とは何ですか?なぜそれが重要なのですか?

更新:演算子の結合性

4

10 に答える 10

115

演算子の場合、結合性とは、同じ演算子が連続して表示されたときに、どの演算子の出現が最初に適用されるかを意味します。以下では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
于 2009-05-30T20:15:37.410 に答える
14

結合性には次の3種類があります。

数学の結合法則

プログラミング言語での演算の順序

CPUキャッシュの結合性。

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

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

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

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

于 2009-05-30T20:13:16.650 に答える
9

単純!!

Left Associative means we evaluate our expression from left to right

Right Associative means we evaluate our expression from right to left 

*、/、および % の優先順位は同じですが、結合性によって答えが変わる場合があります。

例: 次の式があります: 4 * 8 / 2 % 5

Left associative:   (4 * 8) / 2 % 5 ==> (32 / 2) % 5 ==> 16 % 5 ==> 1

Right associative:  4 * 8 /(2 % 5) ==>  4 * ( 8 / 2) ==> 4 * 4 ==> 16
于 2016-08-05T21:27:09.183 に答える
7

これは、同じ優先順位の演算子の評価の順序です。LEFTTORIGHTまたはRIGHTTOLEFTの順序が重要です。にとって

3 - 2 - 1

左から右の場合は、

(3 - 2) - 1

右から左の場合は0です。

3 - (2 - 1)

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

2020年の更新:

3 - 2 - 1「もちろん、左から右へ」という主張であれば、状況は些細なことに思えるかもしれません。ただし、RubyやNodeJSで実行する場合など、他の場合は次のようになります。

$ irb
2.6.3 :001 > 2 ** 3 ** 2
 => 512 

これ**は「の力」の演算子です。結合性は右から左です。そしてそれは

 2 ** (3 ** 2)

これは2 ** 9、つまり、512の代わりに

(2 ** 3) ** 2

これは8 ** 2、つまり、64です。

于 2009-05-30T20:19:36.513 に答える
5

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

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

12-5 + 3と書くと、考えられる評価は次のようになります。

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

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

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

于 2009-05-30T20:25:05.737 に答える
3

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

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

a-b + c

次のように評価される可能性があります(-と+の優先順位が同じであると仮定):

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

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

于 2009-05-30T20:12:34.420 に答える
1

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

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

副作用が発生する可能性がある場合、同じ前例を持つ操作で最も重要です。

于 2009-05-30T20:13:23.500 に答える
0

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

于 2009-05-30T22:05:50.667 に答える
0

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

于 2010-03-22T10:12:49.260 に答える
0

結合性は、プログラミング言語の概念における計算の順序の下にあります。計算の順序によって、式の意味が決まります。それには主に2つのルールがあり、

  1. 優先ルール
  2. 結合規則

優先順位規則は、異なるタイプの「隣接する」演算子が評価される順序を定義します。すべてのプログラミング言語には、その演算子に関する独自の演算子優先順位表があります。

結合性に戻ると、

同じ優先順位で隣接する操作の実行順序を定義します。3つの味があり、

左の結合性
右の結合性
非結合性

演算子が左結合の場合は左から右に評価され、右結合の場合は右から左に評価されます。

于 2020-08-26T04:31:51.010 に答える