7

如果x = 3和 z 未分配,
为什么z = x-- - --x评估为 2?

我的教授目前正在讲课,而我目前陷入了困境。不幸的是,没有人能解释为什么会这样。

4

3 回答 3

17

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

因此,3 - 1 = 2。

于 2012-06-14T07:49:41.223 回答
8

这是操作的顺序,为了更好地理解而进行了说明:

  • 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 --表示在计算表达式后进行递减。

于 2012-06-14T07:52:35.793 回答
5

好的,它很简单:

让我们添加括号:

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

^^ 这就是编译器在标记化后如何看待您的代码。

编译器从左到右评估方程(右部分)

现在,

x--等于弹出 x 的值,然后将其递减并将值推回内存中。好的,让我们一起做:

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

--x等于递减X值,然后将该值POP到方程中。我们开始做吧:

X 的当前值为 2(因为之前的操作减少了它),现在我们想再次减少它。2-1 = 1,明白了。

现在,回到整个方程:z = (3) - (1) = 2

于 2012-06-14T07:56:42.553 回答