一元前缀增量++运算符不同的输出

时间:2017-02-07 00:39:48

标签: c# variables operators unary-operator prefix-operator

有人可以解释为什么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
         */

似乎在背景中发生了一些我不理解的不同逻辑。

2 个答案:

答案 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
*/