1

両者の違いが分からなくて困っています。あなたがこれらの与えられたものを持っているとしましょう:

a[0] = 10
a[1] = 13
a[2] = 17
a[3] = 19
x = 0
y = 3

演算子の優先順位:

++, --  
*, /, % Left Associative  
+, - Left Associative

オペランドの評価順序:
右から左

上記のルールが与えられた場合、以下の式をどのように評価しますか?

a[++x] + ++x % 7 % y

私の教授によると、答えは 18 ですが、理由がわかりません。私が理解していることから、結合性は同じ優先順位の演算子が評価される順序であり、オペランドの評価順序はオペランドが評価される順序であるため、2 % 7 のようなものは左から右のオペランド評価順序で 2 になり、操作評価順序で 1 になります。私の教授がどのようにして 18 という答えを得たのか説明できる人はいますか?

4

2 に答える 2

2

優先順位と結合性は、式がどのように (暗黙的に) 括弧で囲まれているかを示します。次に、評価順序によって、部分式が評価される順序が決まります。

例を見てみましょう:

a[++x] + ++x % 7 % y

最上位には+and %as 演算子があります。+優先順位が低いので、

a[++x] + (++x % 7 % y)

右の部分式には が 2 つ%あり、これは左結合であるため、

a[++x] + ((++x % 7) % y)

右から左への評価順序で、((++x % 7) % y)が最初に評価されるようになりました。ここでも右から左の評価順序で、yが最初に評価され、結果は 3 になります。次に++x % 7が評価されます。最初に 7、次に++x. 後者の結果は 1 です1 % 7 = 1。あとは宿題なので任せます。

于 2012-05-01T22:53:12.733 に答える
1

あなたが持ってい() + () % 7 % yます。ルールに基づいて、() % 7は前に評価され... % y、それは の前に評価され() + ...ます。

最初に1 と を++x % 7評価++xして取得しx=1ます。1 % 7 = 1.
次に1 % yor1 % 3を実行して 1 を取得
しますa[++x] + 1。それを思い出すとx=1、 が得られa[2] + 1 = 17 + 1 = 18ます。

于 2012-05-01T22:53:37.927 に答える