-2

質問は:

int z, x=5, y=-10 ,a=4, b=2;
z = x++ - --y * b / a;

出力と、「y」の負の値に対して--yがどのように機能するかを知りたかっただけです。これを解決するための優先順位は何ですか?

4

5 に答える 5

2

演算子の優先順位または「操作の順序」に基づいて評価されます - http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Operator_precedence

于 2012-09-14T18:59:23.523 に答える
2
int z, x=5, y=-10 ,a=4, b=2;
z = x++ - --y * b / a;
z = 5++ - --(-10) * 2 / 4 // Suffix ++/-- goes first
z = 5 - --(-10) * 2 / 4 // Prefix ++/-- is next
z = 5 - (-11) * 2 / 4 // and then * and /
z = 5 - (-22) / 4
z = 5 - (-5)
z = 10

y とは異なり、x はその値を保持します。サフィックス表記では、演算子は変更された値ではなく元の値を返すためです。(他の誰かが演算子の優先ページにリンクしているので、リンクしません)

于 2012-09-14T19:04:06.587 に答える
1

操作の優先順位

z = ((x++) - (((--y) * b) / a));

ああ、

  1. の結果は、 を--y計算する前に知っておく必要があります--y * b
  2. の結果は、--y * b計算する前に知っておく必要があります--y * b / a(*/の優先順位は同じですが、左結合であるため、a / b * cとして解析されます(a / b) * c)。
  3. の結果は、x++計算する前に知っておく必要がありますx++ - --y * b / a
  4. 最後に、結果をx++ - --y * b / aに代入する前に、 の結果を知る必要がありますz

しかし...

優先順位は評価の順序と同じではないことに注意してください。個々の式x++--yb、およびは、任意の順序aで評価できます。コンパイラは、次に、次に、次に評価することを選択できます。コンパイラは、 を評価する前に評価することを選択する場合があります。コンパイラは、 への結果の割り当て後まで、への副作用の適用を延期することを選択する場合があります。 x++ab--y--y * b / ax++x++--yz

于 2012-09-14T20:33:32.407 に答える
1

これらの 2 つは、操作の順序に従って同等です。

z = x++ - --y * b / a; 

z = (x++) - (((--y) * b) / a); 
于 2012-09-14T19:03:57.583 に答える
0

y=は の前にあるため操作の前に減少し、の後にあるため操作の--後に増加yし ます。x=++x

例えば:

int i = 2, y = 3, z;
z = ++i + ++y;         //3 + 4

また

int i = 2, y = 3, z;
z = --i + --y;         //1 + 2

int i = 2, y = 3, z;
z = i++ + y++;         //2 + 3

最後の例では、まだ 2 + 3 であることに注意してください。これは、++が後でiあり、ステートメントyの後でインクリメントされるためです。=

これを知って、通常の操作順序を適用 (1. Parentheses 2. Exponents 3. Multiplication/Divison 4. Addition/Subtraction)して問題を解決してください。掛け算と割り算のセグメントは互いに隣り合っているため、その部分を左から右に読むだけです。

int z, x=5, y=-10 ,a=4, b=2;
z = x++ - --y * b / a;
y = --y
y = -11
z = 5 - -11 * 2 / 4
z = 5 - -22 / 4
z = 5 - -5
z = 10
x = 5++
x = 6 

これが私の思考プロセスです: 私は and の位置に基づいて and の値を解釈しx、次にその値を掛けてから割り、次にその値を に加算し、最後に をインクリメントします。掛け算と割り算が隣り合っている場合は、左から右に読んでください。y++---y * baxx

于 2012-09-14T19:01:06.510 に答える