【问题标题】:Arithmetic operator confusion算术运算符混淆
【发布时间】:2010-01-05 09:58:05
【问题描述】:

为什么我在对相同的变量值使用算术运算符时得到两个不同的值。我刚刚改变了我的第二个程序,这导致了不同的输出。谁能告诉我为什么?

    int number=113;
 int rot=0;
 rot=number%10;
 rot*=100+number/10;
 System.out.println(rot);//333



    int number=113;
 int rot=0;
 rot=number%10;
 rot=rot*100+number/10;
 System.out.println(rot);//311

【问题讨论】:

  • 顺便说一句,有时,在数学操作数之间添加空格可以增加可读性并使公式更清晰(也为您自己!)。例如。你可以写rot = rot*100 + number/10
  • 加括号会更清楚
  • 括号混淆了像这些恕我直言的简单表达式,简单的算术规则对开发人员应该没问题

标签: java operators


【解决方案1】:

在你计算的第一部分

rot *= 100 + number/10

这是

rot = rot * (100 + number/10)

在第二部分:

rot = rot*100 + number/10

请注意,乘法和除法在加法和减法之前。

【讨论】:

    【解决方案2】:

    问题在于 *= 的优先级与 * 和 + 不同(低于)

    rot *= 100 + number/10;
    

    等价于

    rot = rot * (100 + number /10);

    运算符优先级可以在here找到

    【讨论】:

      【解决方案3】:

      看来问题出在operator precedence

      这意味着num * 10 + 13被视为(num * 10) + 13,即()是根据语言规则自动添加的。

      那么,在您的示例中,不同之处在于第一个含义如下:

      rot*=100+number/10;
      // Is the same as this:
      rot = rot * (100 + (number / 10));
      

      而第二个意思如下:

      rot=rot*100+number/10;
      // Is the same as this:
      rot = (rot * 100) + (number / 10);
      

      由于括号在不同的位置,这些可能计算为不同的数字。

      【讨论】:

      • -1 - rot*=100+number/10;rot * 100 + number / 10; 不同,rot * 100 + number / 10;rot * (100 + (number / 10)); 不同。你得到了正确的答案,但出于错误的原因。
      • @Stephen:谢谢,我已将答案更改为我认为正确的答案(刚刚删除了第二步,因为它是错误的......不知道我想说什么它)。
      【解决方案4】:

      在第二个代码中,因为 * 的优先级很高。将计算 rot*100 并将 (number/10) 添加到 (300 + 11 = 311)。

      【讨论】:

        猜你喜欢
        • 2018-04-01
        • 2012-09-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-29
        • 2014-02-08
        • 2012-02-13
        相关资源
        最近更新 更多