2

关于 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 的值之外没有任何影响。如果有人能阐明这个话题,我将不胜感激。谢谢。

***问题已解决。很多很棒的答案和意见的家伙,很难决定接受什么答案,但你们都是这里的赢家!再次感谢您的帮助!=)

4

5 回答 5

5
        int var1, var2 = 5, var3 = 6;

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

输出:

25

6

所以var2按预期递增。

于 2012-07-17T07:26:02.020 回答
4

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

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

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

所以你的代码:

var1 = var2++ * --var3;

做这样的事情:

int oldVar2 = var2;
var2 = var2 + 1;
var3 = var3 - 1;
var1 = oldVar2 * var3;
于 2012-07-17T07:29:48.033 回答
2

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

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

right-hand运算符的情况下,返回值是“旧”值,即使实际值增加了。

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

于 2012-07-17T07:28:48.920 回答
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,您会发现它已按预期增加。

然而!如果涉及++foo和的复杂计算bar--变得混乱,那么就不要内联;将计算分解成更简单的部分,然后执行。编译器不会评判你。

于 2012-07-17T07:30:51.607 回答
0

这是一些利用PreFixPostFix 增量运算符概念的示例类。代码写有注释,使输出更清晰。

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();
        }
    }
于 2016-03-16T04:09:31.683 回答