发布和预增

时间:2018-08-17 06:09:10

标签: java prefix

int v=3;
int s=6 + (--v);

int d= --v + --v/s++*v++ + ++s%v--;

能告诉我如何解决这个问题的人吗? 最终我得到9%0;

但是编译器将d的值显示为1

有人可以告诉我我哪里做错了

1 个答案:

答案 0 :(得分:2)

对于 Java ,据我所知,d = 1的值应该正确:

  • 编辑:评估是从左到右的顺序(正如安迪·特纳在其评论中所述)
  • ++x⇒首先增加,然后使用变量
  • x++⇒首先使用,然后递增变量

所以我得到了

int v=3;
int s=6 + (--v); // s=8, v=2

int d = --v // 1
      + --v // 0
      / s++ // 8, s=9
      * v++ // 0, v=1
      + ++s // 10
      % v--; // 0

d = 1 + 0 / 8 * 0 + 10 % 0

根据* / %的运算符优先级

d = 1 + 0 + 0

编辑2:请注意,其他语言可能具有其他评估规则(如@AdaRaider在评论中所述,另请参见我的C ++示例)。