C#++一元运算符增量问题

时间:2012-07-17 07:22:23

标签: c# operators increment

有关C#++(右侧放置)运算符的问题。

作为左侧放置的++运算符,例如,++ var,(例如,保持int值为1)将在任何其他计算发生之前递增1(示例值1将在执行表达式后变为2并且结果显示)。

任何人都可以解释左侧放置操作符和右侧放置操作符之间的区别吗? (var ++)因为即使在执行表达式之后它似乎也没有增加。以下是一些示例代码:

        int var1, var2 = 5, var3 = 6;

        var1 = var2++ * --var3;
        Console.WriteLine(" {0} ", var1);
        Console.ReadKey();

由于var3的减少,这只是5 x 5,但没有减少,它是5 x 6,并且var2 ++似乎除了它携带的值5之外没有任何影响。如果有人能够阐明这个话题,我将不胜感激。感谢。

***问题解决了。很多很棒的答案和输入员,很难确定接受什么答案,但你们都是赢家!再次感谢您的帮助! =)

5 个答案:

答案 0 :(得分:5)

        int var1, var2 = 5, var3 = 6;

        var1 = var2++ * --var3;
        Console.WriteLine(" {0} ", var1);
        Console.WriteLine(" {0} ", var2);
        Console.ReadKey();

输出:

25

6

所以var2按预期递增。

答案 1 :(得分:4)

++x(前缀增量)在评估表达式之前递增值。因此,它首先递增值然后返回它。

x++(后缀增量)在计算表达式后递增值。因此,它返回未更改的值,并且仅在此之后,x递增。

var1 = var2++ * --var3;行之后,var2实际上是6,因为在评估其值后,增加了

所以你的代码:

var1 = var2++ * --var3;

做这样的事情:

int oldVar2 = var2;
var2 = var2 + 1;
var3 = var3 - 1;
var1 = oldVar2 * var3;

答案 2 :(得分:2)

在C#中,left-placed运算符和right-placed运算符之间的唯一差异是计算后的实际返回值

如果是left-hand运算符,则返回 new或增量值。

如果是right-hand运算符,则返回值为“旧”值,即使实际值增加也是如此。

但重要的是要知道,在这两种情况下,执行的操作的序列 完全相同。

答案 3 :(得分:1)

评估乘法后,var2值增加;在评估乘法之前,var3值递减;它可以大致概念化为:

    var tmp = var2; // 5
    var2 = var2 + 1; // 5 + 1 = 6
    var3 = var3 - 1; // 6 - 1 = 5;
    var1 = tmp * var3; // 5 * 5 = 25;

所以25是正确的。如果您检查var2,您会发现它已按预期增加。

然而!如果涉及++foobar--的复杂计算令人困惑,那么只需不要内联;将计算分解为更简单的部分,并执行它。编译器不会判断你。

答案 4 :(得分:0)

以下是 PreFix PostFix 增量运算符的一些示例类利用概念。代码用注释编写,使输出更清晰。

public class Test
    {
            public Test()
            { }


        public static void Main(string[] args)
        {
            int i = 0;

            Console.WriteLine("\n" + "Displaying Initial            i      =     " + i + "\n");   // Prints 0 i.e. Initial value of i

            Console.WriteLine("\n" + "Displaying PostFix            i++    =     " + i++ + "\n"); // Prints 0. Then value of i becomes 1.

            Console.WriteLine("\n" + "Displaying Post-incremented   i      =     " + i + "\n");   // Prints 1 i.e. Value of i after Post-increment

            Console.WriteLine("\n" + "Displaying PreFix             ++i    =     " + ++i + "\n"); // Prints 2. Then value of i incremented to 2

            Console.WriteLine("\n" + "Displaying Pre-incremented    i      =     " + i + "\n");   // Prints 2 i.e. Value of i after Pre-increment

            Console.WriteLine("\n" + "---------------------------------------------" + "\n");

            int j = 0;

            Console.WriteLine("\n" + "Displaying Initial            j      =     " + j + "\n");   // Prints 0 i.e. Initial value of j

            Console.WriteLine("\n" + "Displaying PreFix             ++j    =     " + ++j + "\n"); // Prints 1. Then value of j incremented to 1.

            Console.WriteLine("\n" + "Displaying Pre-incremented    j      =     " + j + "\n");   // Prints 1 i.e. Value of j after Pre-increment

            Console.WriteLine("\n" + "Displaying PostFix            j++    =     " + j++ + "\n"); // Prints 1. Then value of j incremented to 2.

            Console.WriteLine("\n" + "Displaying Post-incremented   j      =     " + j + "\n");   // Prints 2 i.e. Value of j after Post-increment

            Console.ReadLine();
        }
    }