有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

用JAVA代码复制的奇怪结果

我写了一个简单的Java代码

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

如果我给出x=1534236469,它将返回9646324351。然而,它实际上返回1056389758。 在调试时,我发现当它执行964632435*10时,结果是1056389758,而不是9646324350

有人能帮我理解这一点吗


共 (1) 个答案

  1. # 1 楼答案

    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的补码整数,其最小值为-2^31,最大值为(2^31)-1。在JavaSE8及更高版本中,可以使用int数据类型来表示无符号32位整数,其最小值为0,最大值为(2^32)-1。使用Integer类将int数据类型用作无符号整数。有关更多信息,请参见课程编号部分。向Integer类添加了静态方法,如compareUnsigned、divideUnsigned等,以支持无符号整数的算术运算