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 或递减运算符,实际发生的情况未定义。所以不要那样做,结果可能会根据编译器和优化等因素而改变。
我在做一些关于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 或递减运算符,实际发生的情况未定义。所以不要那样做,结果可能会根据编译器和优化等因素而改变。