为什么这是下面循环的输出

本文关键字:循环 输出 为什么 | 更新日期: 2023-09-27 18:28:39

为什么我得到以下输出:4 8 12 16 20

int i, j = 1, k;
  for (i = 0; i < 5; i++)
  {
     k = j++ + ++j;
     Console.Write(k + " ");
  }

为什么这是下面循环的输出

我认为这里的其他答案不正确。

根据数学排序操作按顺序评估变量。在这种情况下,我们只是添加,所以从左到右对它们进行评估。j++然后++j

j++ + ++j
  1. j nbsp nbsp;让我们在循环开始时调用j的值p
  2. j++j评估为递增前值(p),然后j递增(p+1
  3. ++jj被递增(p+2)并且被评估为递增后的值(p+2

因此,两个被评估的数字是p+p+2:

i  initial j  j++ + ++j   k   j
================================
0      1       1  +  3    4   3
1      3       3  +  5    8   5
2      5       5  +  7   12   7
3      7       7  +  9   16   9
4      9       9  + 11   20  11

井k=j++(+)++j

j++将增加j的值,但返回预先增加的值
++j将递增j的值,然后返回递增的值。

j++ = 2 but really returns (1)

不过,一旦你点击++j,你就会增加j的实际值,目前是2。

++j = 3
1 + 3 = 4

++i和i++之间有什么区别?

在C#中,+运算符只是一个函数,在您的例子中,j++++j是函数的参数。函数参数的计算从左到右进行,因此我们对循环的每次迭代都会得到以下结果:

  1. j++递增j的值,但返回原始值
  2. ++j再次递增j的值并返回新值
  3. 使用(1)和(2)的结果调用+运算符

例如,当i==0时,j最初是1。然后j++执行,将j设置为2,并返回1。然后++jj递增到3,并返回3。所以加法变成1 + 3,得到k = 4

  • j++递增j的值,但返回预先递增的值
  • ++j递增j的值,但返回递增的值