如果 x = 3 且 z 未分配,为什么 z = x-- - --x 的计算结果为 2
本文关键字:--x 计算 结果 x-- 如果 分配 为什么 | 更新日期: 2023-09-27 18:37:03
如果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 的值,然后将其递减并推回内存中的值。好的,让我们这样做:
的当前值为 3,递减为 2 - 因此,在等式中,我们将得到 3,但 X 将包含新值 2。
--x
等于递减 X 值,然后将该值 POP 到等式中。让我们来做吧:
X 的当前值是 2(因为以前的操作减少了它),现在我们想再次减小它。 2-1 = 1,知道了。
现在,回到整个等式:z = (3) - (1) = 2
.