算术运算符混淆
为什么我在为相同的变量值使用算术运算符时得到两个不同的值。我刚刚改变了我的第二个程序,这导致了不同的输出。任何人都可以告诉我为什么?算术运算符混淆
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 *= 100 + number/10
这是
rot = rot * (100 + number/10)
而在第二部分:
rot = rot*100 + number/10
注意,乘法和除法除了之前去和减法。
好像问题是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));'。你有正确的答案,但是出于错误的原因。 – 2010-01-05 10:20:01
@Stephen:谢谢,我已经改变了我认为正确的答案(只是删除了第二步,因为它是错的......不知道我想说什么)。 – 2010-01-05 11:28:47
由于*的高优先级,所以在第二个代码中。 rot * 100将会被计算出来并且将被加上(number/10),所以它的(300 + 11 = 311)。
有时,在数学操作数之间添加空格可以增加可读性并使公式更清晰(对于您自己!)。例如。你可以写'rot = rot * 100 + number/10'。 – 2010-01-05 10:18:22
加上括号会使其更加清晰,尽管 – 2010-01-05 10:31:22
括号混淆了像这些imho这样简单的表达式,简单的算术规则对开发人员应该没有问题 – rsp 2010-01-05 11:08:38