我写了一个简单的Java代码。
while (x != 0) {
ret = ret * 10 + x % 10;
x /= 10;
}
如果我给x = 1534236469,它应该返回9646324351.但是,它实际上返回1056389758。 在调试时,我发现当它在做964632435 * 10时,结果是1056389758而不是9646324350。
有人能帮助我理解这个吗?
答案 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
int
:默认情况下,int数据类型是32位带符号的二进制补码整数,其最小值为-2 ^ 31且最大值为值(2 ^ 31)-1。在Java SE 8及更高版本中,您可以使用int数据类型来表示无符号的32位整数,其最小值为0,最大值为(2 ^ 32)-1。使用Integer类将int数据类型用作无符号整数。有关更多信息,请参阅数字类一节。已经将诸如compareUnsigned,divideUnsigned等静态方法添加到Integer类中,以支持无符号整数的算术运算。