算术运算符混淆

时间:2010-01-05 09:58:05

标签: java operators

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

    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

4 个答案:

答案 0 :(得分:8)

在第一部分中计算

rot *= 100 + number/10

rot = rot * (100 + number/10)

在第二部分:

rot = rot*100 + number/10

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

答案 1 :(得分:2)

问题是* =具有与*和+

不同(更低)的优先级
rot *= 100 + number/10;

等于

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

可以找到here

的运算符预设

答案 2 :(得分:1)

问题似乎是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);

由于括号位于不同的位置,因此这些可能会评估为不同的数字。

答案 3 :(得分:0)

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