2016-04-30 13 views
-1

同じ優先順位の演算子が2つある場合、その式はその結合性に従って評価されます。ここ演算子の優先順位と結合性

i=b + b + ++b 

iだから++bが最初の2つのbの値を変更しなかった4 ですが、実行は左から右にあるので、それは、最初に実行:私は、どのように、次の作品を知ってほしいです。ここで

、しかし:

int b=1; 
i= b+ ++b + ++b ; 

iアソシエによると、私たちは第三bを実行しなければならないので、それがあるべき6

です: 1+ (++1) + (++1 should be done first)。したがって、それは次のようになります: 1 + ++ 1 + 2 = 5 しかし、これは正しくないので、どのように動作しますか?

+1

Associativityは実行順序とは関係ありません。注文は左から右のままです。 – Savior

答えて

1

優先度実行順を混同しています。

例:

a[b] += b += c * d + e * f * g 

優先ルールは++=前に来る前に*が来ると述べています。結合ルール(優先順位ルールの一部)は、*が左結合で、+=が右結合であることを示します。

a[b] += (b += ((c * d) + ((e * f) * g))) 

しかし、この式はまだ評価左から右へ:

優先順位/結合性ルールは、基本的に上記の式を変換し、暗黙の括弧のアプリケーションを定義します。

これは、の式a[b]のインデックス値が、b += ...が実行される前の値bを使用することを意味します。

さらに複雑な例として、+++=オペレータを混在させるには、質問Incrementor logicと詳細answer of how it worksを参照してください。

1

これは正しいです、最初のbは1で、2番目のbは加算の前に1だけ増分されますので、2、3番目のbはすでに2であり、1ずつ増加して3になります。式はあなたが言ったように左から右へと評価され、したがって第3のbはインクリメントの前にすでに2である。

+0

これは疑問ではない、第二bは第三bの前になぜ実行されるのか? preincrementは正しいassoicativeです –

+0

@ user1865719それがどのように関連付けられていても、もう一方のbは自身のインクリメントの前に2になります。 –

+0

@ user1865719実行優先順位*を*実行順序*と混同しています。 – Andreas

関連する問題