【问题标题】:Clarification on math expression using prefix increment operator and bracket precedence [closed]使用前缀增量运算符和括号优先级澄清数学表达式[关闭]
【发布时间】:2019-01-05 09:01:55
【问题描述】:

鉴于此代码:

int p,k=8;
p=k*(++k-8);
System.out.println(p);

++k 被评估为k=9 然后变成k*(9-8)9*1

int p,k=8;
p=(++k-8)*k;
System.out.println(p);

但这给出了 9 作为输出

【问题讨论】:

标签: java math operator-precedence associativity


【解决方案1】:

你有一个乘法

left side:  k  
right side: (++k-8)

正如你所说的,大括号有优先权。但是,您的程序仍然“从左到右”运行。所以首先评估左侧,即k = 8。然后评估右侧,即(++k-8) = 1。 现在我们已经确定了两边,可以将它们相乘:8*1 = 8

【讨论】:

  • 我同意,但他的输出是“9”。
  • @aomerk 没有。问题是,为什么不是 9?
  • 我真的认为他的想法很糟糕
【解决方案2】:

这是您的代码编译的类文件:

   int k = 8;
    byte var10000 = k;
    int k = k + 1;
    int p = var10000 * (k - 8);
    System.out.println(p); 

【讨论】:

    猜你喜欢
    • 2018-08-22
    • 2019-11-06
    • 2013-12-28
    • 1970-01-01
    • 2021-10-20
    • 1970-01-01
    • 2019-02-13
    • 2020-06-23
    • 2016-05-06
    相关资源
    最近更新 更多