递增和递减i无法正常工作

时间:2013-10-07 09:59:55

标签: c# operators increment decrement

以下两行代码未返回相同的值。有什么理由吗?

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

上一个问题:

编译器如何解释这两行?

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

4 个答案:

答案 0 :(得分: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.

同样,你的第二个例子:

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.

至于你的上一个问题......为什么不把它放到一个控制台应用程序中并自己试一试?

答案 1 :(得分:2)

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

知道后期增量。将首先使用值,然后递增。它相当于

i = i + i;
i = i+1;

这是预增量。值将先增加然后再使用。

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

相当于

i = i+1;
i = i + i;
  

i = i +++ i; //是i + ++ i还是i ++ + i?

被解释为

i = i + 1;    i = i + i;

和这个

  

i = i --- i; //是我 - - i还是我 - - 我?

被解释为

i= i-1;
i = i-i; 

答案 2 :(得分:0)

增量或减量运算符的优先级总是高于算术运算符,如+ - * /
有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/aa691323(v=vs.71).aspx。 此外,后固定递增或递减运算符的值仅在当前语句之后有效。 例如:

i = i + i++ = 1 + 1++ = 1 + 1 = 2; // value of i is effective after increament is done
i = i++ + i = 1++ + 2 = 3; //Next value of i contains updated value i.e. 2
i = i + ++i = 1 + ++1 = 1 + 2 = 3; //Next value of i contains updated value i.e. 2
i = ++i + i = ++1 + i = 2 + 2; //Both value of i contains updated value i.e. 2 because of prefixed operator
i = i+++i = i++ + i;
i = i---i = i-- - i;

答案 3 :(得分:0)

我认为尝试理解这一点的最佳方法是查看编译器对此的影响。

请参阅此处,了解案例的概述

x=i-- - --i;

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

最好的问候