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

ars*_*sus 7 javascript c#

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

我的教授此刻正在讲授这个问题,而我现在仍然处于这种两难境地.不幸的是,没有人能解释为什么会这样.

zvo*_*ona 17

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

因此,3 - 1 = 2.


Sim*_*Var 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 --意味着在评估表达式之后将进行递减.


Vit*_*lov 5

好的,非常简单:

让我们添加括号:

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

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

编译器从左到右评估等式(右部分)

现在,

x--等于POP的x值然后将其递减并将PUSH值返回到存储器中.好的,让我们一起做:

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

--x等于递减X值,然后将此值POP化为等式.我们开始做吧:

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

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