C 中被误解的运算符优先级

Misunderstood Operators Precedence in C

我在做一些关于C中操作执行顺序的练习,我遇到了一个我不太明白的案例。

int d = 1;
int e = d--/10;     // the result of e will be 0;

在计算“e”的值之前,我们将“d”递减,然后进行除法。

另一方面,在“f”中,我们在递减“d”之前进行了除法!

int d = 1;
int f = 10/d--;     // the result of f will be: 10

我的问题是:知道在这两种情况下,“d”的递减是 post-递减,为什么使用的“d”的值存在差异?

实际上没有区别。它使用 d=1 并在两种情况下执行 post-decrement。

您看到明显差异的原因是您正在进行整数除法,向 0 舍入。即:(int)1 / (int)10 = 0

What is the behavior of integer division?

上查看已接受的答案

为了

int e = d--/10;

你说

before calculating the value of "e", we decremented the "d" then we did the division.

这就是您困惑的主要原因。 d 的值在 之后被递减 在除法中使用它。如果在除法之前的表达式中,它仍然是post-decrement,使用原始值后会发生

你也在做整数除法,它向零舍入,这可能会增加你的困惑。

并且预期可能的 follow-up question/experiment:如果您在同一个变量的同一个表达式中有多个 post- 或 pre-increment 或递减运算符,实际发生的情况未定义。所以不要那样做,结果可能会根据编译器和优化等因素而改变。