与JAVA代码相乘的奇怪结果

时间:2014-12-13 05:10:46

标签: java

我写了一个简单的Java代码。

while (x != 0) {
      ret = ret * 10 + x % 10;
      x /= 10;
}

如果我给x = 1534236469,它应该返回9646324351.但是,它实际上返回1056389758。 在调试时,我发现当它在做964632435 * 10时,结果是1056389758而不是9646324350。

有人能帮助我理解这个吗?

1 个答案:

答案 0 :(得分:4)

ret更改为long

public static void main(String args[]) {
    int x = 1534236469;
    long ret = 0;
    while (x != 0) {
        ret = ret * 10 + x % 10;
        x /= 10;
    }
    System.out.println(ret);
}

输出(如您所料,如果我ret int我得到您指定的输出

9646324351

来自Primitive Data Types

int :默认情况下,int数据类型是32位带符号的二进制补码整数,其最小值为-2 ^ 31且最大值为值(2 ^ 31)-1。在Java SE 8及更高版本中,您可以使用int数据类型来表示无符号的32位整数,其最小值为0,最大值为(2 ^ 32)-1。使用Integer类将int数据类型用作无符号整数。有关更多信息,请参阅数字类一节。已经将诸如compareUnsigned,divideUnsigned等静态方法添加到Integer类中,以支持无符号整数的算术运算。