有关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之外没有任何影响。如果有人能够阐明这个话题,我将不胜感激。感谢。
***问题解决了。很多很棒的答案和输入员,很难确定接受什么答案,但你们都是赢家!再次感谢您的帮助! =)
答案 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
,您会发现它已按预期增加。
然而!如果涉及++foo
和bar--
的复杂计算令人困惑,那么只需不要内联;将计算分解为更简单的部分,并执行它。编译器不会判断你。
答案 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();
}
}