如果 x = 3 且 z 未分配,为什么 z = x-- - --x 的计算结果为 2

if x = 3 and z is unassigned, why does z = x-- - --x evaluates to 2?

本文关键字:--x 计算 结果 x-- 如果 分配 为什么      更新时间:2023-09-26

如果x = 3和z未分配,
为什么z = x-- - --x的计算结果为 2?

我的教授目前正在讲授这个问题,而我目前正陷入这种困境。不幸的是,没有人能解释为什么会发生这种情况。

在 x--, x = 3 上,之后是 2。在 --x 上,x = 1,因为减法(从 2 开始)是事先完成的。

因此,3 - 1 = 2。

以下是操作顺序,为了更好地理解,进行了说明:

  • x-- - --x 保持 x 的值(我们称之为 tmpA)。 tmpA 是 3。
  • x-- - --x 减少 x。现在是2。
  • x-- - --x 减少 x。现在是 1。
  • x-- - --x 保持 x 的值(我们称之为 tmpB)。 tmpB 是 1。
  • x-- - --x 从计算值执行子结构。 3 - 1 = 2。

-- prefix表示递减将在计算表达式之前完成,postfix --表示递减将在计算表达式后完成。

好的,它很简单:

让我们添加括号:

z = ( x-- ) - ( --x )

^^这是编译器在标记化后查看代码的方式。

编译器从左到右计算公式(右侧)

现在

x--等于 POP x 的值,然后将其递减并推回内存中的值。好的,让我们这样做:

X

的当前值为 3,递减为 2 - 因此,在等式中,我们将得到 3,但 X 将包含新值 2。

--x等于递减 X 值,然后将该值 POP 到等式中。让我们来做吧:

X 的当前值是 2(因为以前的操作减少了它),现在我们想再次减小它。 2-1 = 1,知道了。

现在,回到整个等式:z = (3) - (1) = 2 .