有人可以解释为什么C# ++运算符根据分配的变量提供不同的输出。 https://msdn.microsoft.com/en-us/library/36x43w8w.aspx
int x = 0;
int y = x++;
Console.WriteLine($"x: {x}" );
Console.WriteLine($"y: {y}" );
/*Prints
* x: 1
* y: 0
*/
我的理解是y
被设置为x
,这是(0)然后分配y
; x
增加1;
int x = 0;
x = x++;
Console.WriteLine($"x: {x}" );
/*Prints
* x: 0
*/
为什么同样的逻辑不适用于此? x
应设置为x
,在分配增量x
之后为0,然后打印1而不是0
此示例相同
int x = 0;
x += x++;
Console.WriteLine($"x: {x}" );
/*Prints
* x: 0
*/
又一个例子
int x = 0;
x += x++ + x++;
Console.WriteLine($"x: {x}" );
/*Prints
* x: 1
*/
似乎在背景中发生了一些我不理解的不同逻辑。
答案 0 :(得分:2)
return gcd(m,n-m)
第一个操作 - 存储初始值int x = 0;
x = x++;
(0),第二个操作 - 增加x
(1),第三个操作 - 将存储值分配给x
(0)
x
在这种情况下,在递增(0)之前加法的第一个操作数“冻结”,第二个操作数在递增之前“冻结”(0)。结果为int x = 0;
x += x++;
答案 1 :(得分:-1)
你已经让操作员错误地处理了你想做的事情。
根据文件:
增量运算符可以出现在其操作数之前或之后:++变量和变量++
第一种形式是前缀增量操作。操作的结果是操作数增加后的值。
第二种形式是后缀增量操作。操作的结果是操作数增加之前的值。
因此,在您的代码示例中,您在 y
递增之前将x
设置为x
。如果您希望将y
设置为x
的 new 值,则需要使用前缀增量操作来递增x
并将结果设为新值如你所愿:
int x = 0;
int y = ++x;
Console.WriteLine($"x: {x}" );
Console.WriteLine($"y: {y}" );
/*Prints
* x: 1
* y: 1
*/