-3

切入正题,答案是“s 为 20,t 无法确定”。我知道 s 是 20 的部分,但为什么 t 无法确定?请帮我!

4

2 回答 2

2
int s = 20; 
int t = s++ + --s;

工作:递增(后递增)s 到 21(当前值 20)+ 递减(前递减)s 到 20(当前值 20)。

So, t=20+20;
And s =20;

在考虑了优先级和括号之后,Java 保证从左到右计算表达式。例如,要计算eat() + Drink() - beMerry(),Java 将首先计算eat(),然后是drink(),然后执行加法,然后计算beMerry(),最后执行减法。eat() 在drink() 之前计算,因为eat() 在drink() 的左边,表达式从左到右计算。这种保证很重要,因为如果以相反的顺序调用eat() 和drink(),它们的调用可能会产生不同的副作用。

于 2013-02-11T07:00:14.763 回答
0

这个

由于递增/递减运算符会修改其操作数,因此在同一表达式中多次使用此类操作数可能会产生未定义的结果。例如,在诸如 x − ++x 之类的表达式中,并不清楚应该按什么顺序执行减法和增量运算符。当编译器应用优化时,这种情况会变得更糟,这可能导致操作的执行顺序与程序员的预期不同。

现在,你的答案应该很清楚了。在我看来,t 的值可能因编译器/优化而异。

这是更多信息: http ://www.gnu.org/software/gnu-c-manual/gnu-c-manual.html#Sequence-Points-Constrain-Expressions

于 2013-02-11T07:04:46.787 回答