gpt4 book ai didi

c# - 为什么在 C# 中 (++x - --x) 的答案对于 x 的每个值总是 1?为什么不是0?

转载 作者:行者123 更新时间:2023-12-03 23:59:08 25 4
gpt4 key购买 nike

我不明白为什么在 C# 中,++x - --x 对于 x 的每个值都是 1。

int x = 0;

Console.WriteLine(++x - --x);//给出 1

我认为答案应该是 0,因为变量 x 涉及双方。并且x在减法处理之前进行递增和递减。 C++ 中的相同方程返回 0,这对我来说很有意义。

谁能告诉我这里到底发生了什么?

最佳答案

这实际上是 C 和 C++ 中未定义的行为。例如,C 声明读取和修改没有中间序列点的对象是未定义的。

但是,C# 会锁定行为,以便定义行为。来自 online docs :

Unrelated to operator precedence and associativity, operands in an expression are evaluated from left to right. The following examples demonstrate the order in which operators and operands are evaluated:

OPERAND EVALUATION
Expression Order of evaluation
a + b a, b, +
a + b * c a, b, c, *, +
a / b + c * d a, b, /, c, d, *, +
a / (b + c) * d a, b, c, +, /, d, *

而且,来自 operator precedence table ,可以看到++x(一元范畴)的优先级高于x + y(加法范畴)。

在您的情况下,首先评估子表达式 ++x 并导致 x 预先递增,因此该子表达式的值是原始值x 加一。

然后子表达式 --x 被求值并导致 x (已经从上一步递增)被预先递减所以那个子表达式的值是原来的 x.

而且,由于 x + 1 - x == 1 用于除数学世界的最暗角之外的所有角落,因此结果始终为 1。我仍然不会这样的事情,但至少它是明确定义的。

关于c# - 为什么在 C# 中 (++x - --x) 的答案对于 x 的每个值总是 1?为什么不是0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64711164/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com