7

長い間、私はそれを理解していると思っていました.c# での演算子の優先順位のトピックについて、「学生」の何人かを学ぶためにいくつかのパズルを作成するつもりでした. しかし、私はまだそれを正しく理解していないことがわかりました。</p>

パズル: ここでの出力は何ですか?

int a = 0;            
int x = --a + a++;
Console.WriteLine(x);
Console.WriteLine(a);

出力:

-2 0

ここですべてクリア、私はこれを期待していました

次に、問題の 1 つ:

int b = 0;
int y = b-- + b++;
Console.WriteLine(y);
Console.WriteLine(b);

出力:

-1 0

さて、ここでも y が -2 であることを期待していました…今、演算子の優先順位規則と評価の順序を適用しようとしていますが、自分で説明したかどうかはわかりません。今日、この投稿を何度か読み直しましたが、それでもよくわかりません。なぜ結果が -1 なのですか? 2番目の結果がどのように評価されるかを誰かが手伝ってくれますか? 最初のものとはなぜ、どのように違うのですか?

4

5 に答える 5

15

b--デクリメント後です。そう:

b-- returns zero and subtracts 1 from b, leaving -1 in b.

b++ returns the -1 from the last step and adds 1, leaving 0 in b.

加算の最終結果: -1。

于 2013-04-30T23:06:20.997 に答える
2
int b = 0;
int y = b-- + b++;

それを段階的に分解してください:

y = b--

ここで、y は b (0) に設定され、次に b は にデクリメントされ-1ます。

+ b++

ここで、y (0) が b (前のステップで -1 にデクリメント) に加算され-1、次に b が 0 にインクリメントされます。出力:

-1 0
于 2013-04-30T23:09:00.427 に答える
0

後置--/変数の元の値を++返します。そう:

あなたの例ではb-- + b++

  • b--b をデクリメントし、元の値を返すことを意味します。だからb = b - 1b-1であり、式の値は です0
  • b++は b をインクリメントし、元の値を返すことを意味します。だからb = b + 1b0であり、式の値は です-1
  • 次に、0 + -1 == -1. これはybまだまだ0です。
于 2013-04-30T23:09:41.727 に答える