Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 递增和递减i不能正常工作_C#_Operators_Increment_Decrement - Fatal编程技术网

C# 递增和递减i不能正常工作

C# 递增和递减i不能正常工作,c#,operators,increment,decrement,C#,Operators,Increment,Decrement,以下两行代码返回的值不同。有什么原因吗 int i; i = 1; i = i + i++; //Returns 2, expecting 3 及 语义上,这应该是相同的a+b=b+a对吗 与减少i相同: i = 1; i = i - i--; //Returns 0, expecting 1 及 更让我困惑的是增量后运算符的使用: i = 1; i = i + ++i; //Returns 3 及 与递减运算符相同: i = 1; i = i - --i; //Returns 1 及

以下两行代码返回的值不同。有什么原因吗

int i;

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

语义上,这应该是相同的
a+b=b+a
对吗

与减少
i
相同:

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

更让我困惑的是增量后运算符的使用:

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

与递减运算符相同:

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

最后一个问题:

编译器如何解释这两行代码

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

增量前(
++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.

至于你的最后一个问题。。。为什么不把它放到控制台应用程序中,自己试试呢?

增量前(
++i
)和增量后(
i++
)之间有区别。区别在于:

i = i + i++; //Returns 2, expecting 3
预增量将在使用结果之前添加值。增量后将使用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.
至于你的最后一个问题。。。为什么不把它放到控制台应用程序中,自己试试呢

i = i + i++; //Returns 2, expecting 3
称为后增量。值将首先使用,然后递增。相当于

i = i + i;
i = i+1;
i = i+1;
i = i + i;
这是预增量。值将首先递增,然后使用

i = i++ + i; //Returns 3
相当于

i = i + i;
i = i+1;
i = i+1;
i = i + i;
i=i+++i;//是i++i还是i++i

被解释为

i=i+1; i=i+i

还有这个

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

被解释为

i= i-1;
i = i-i; 
称为后增量。值将首先使用,然后递增。相当于

i = i + i;
i = i+1;
i = i+1;
i = i + i;
这是预增量。值将首先递增,然后使用

i = i++ + i; //Returns 3
相当于

i = i + i;
i = i+1;
i = i+1;
i = i + i;
i=i+++i;//是i++i还是i++i

被解释为

i=i+1; i=i+i

还有这个

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

被解释为

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

递增或递减运算符的优先级始终高于算术运算符,如+-*/
有关详细信息,请参阅。 此外,postfixed Increment或decreament运算符的值仅在当前语句之后有效。 例如:


递增或递减运算符的优先级始终高于算术运算符,如+-*/
有关详细信息,请参阅。 此外,postfixed Increment或decreament运算符的值仅在当前语句之后有效。 例如:


我认为理解这一点的最好方法是看看编译器是如何理解这一点的

有关本案例的概述,请参见此处

x=i-- - --i;


致以最诚挚的问候

我认为理解这一点的最好方法是看看编译器是如何理解这一点的

有关本案例的概述,请参见此处

x=i-- - --i;


致以最诚挚的问候

几乎是和的副本(最后一份来自Eric Lippert,必须阅读)。
i=1;i=i+i++
为什么在这里期望
3
?这只是为了说明,您永远不应该将
++
和/或
--
与同一表达式中其他地方使用的变量一起使用。读起来太难了。和的几乎一个副本的可能副本(最后一个来自Eric Lippert,必须读取)。
i=1;i=i+i++
为什么在这里期望
3
?这只是为了说明,您永远不应该将
++
和/或
--
与同一表达式中其他地方使用的变量一起使用。这本书太难读了。可能是重复的