0

次の 2 行のコードは、同じ値を返しません。その理由は?

int i;

i = 1;
i = i + i++; //Returns 2, expecting 3

i = 1;
i = i++ + i; //Returns 3

意味的には、これは同じはずa + b = b + aですよね?

減少しても同じi

i = 1;
i = i - i--; //Returns 0, expecting 1

i = 1;
i = i-- - i; //Returns 1, expecting -1

私をさらに混乱させるのは、ポストインクリメント演算子の使用です。

i = 1;
i = i + ++i; //Returns 3

i = 1;
i = ++i + i; //Returns 4, expecting 3

減少演算子でも同じです:

i = 1;
i = i - --i; //Returns 1

i = 1;
i = --i - i; //Returns 0, expecting -1

最後の質問:

これらの 2 行は、コンパイラによってどのように解釈されますか?

i = i+++i; // is it i + ++i or i++ + i?
i = i---i; // is it i - --i or i-- - i?
4

4 に答える 4

2

++iプリインクリメント ( ) とポストインクリメント ( )には違いがありますi++。違いは次のとおりです。

プリインクリメントは、結果を使用する前に値を追加します。ポストインクリメントはreslt..を使用し、値を追加します。だから、あなたの最初の例:

int i;

i = 1;
i = i + i++; // First use equals 1, second use equals one. After this line though
             // i equals 2, because of your use of post-increment.

同様に、2番目の例:

i = 1;
i = i++ + i; // First use is 1. After the first use.. it is incremented..
             // The second use it is 2. Therefore, 1 + 2 == 3.

最後の質問ですが、それをコンソール アプリケーションに入れて、自分で試してみませんか?

于 2013-10-07T10:03:59.330 に答える
0

これを理解しようとする最善の方法は、コンパイラがこれをどうするかを見ることだと思います。

事例の概要はこちら

x=i-- - --i;

https://stackoverflow.com/a/8573429/959028

よろしくお願いします

于 2013-10-07T10:11:29.887 に答える