鱼悠奕 2024-03-01 13:02 采纳率: 61.5%
浏览 21
已结题

1024*1024*1024*1024=0?


        int num1 = 1024;
        System.out.println("num1 = " + num1);

        int num2 = 1024 * 1024;
        System.out.println("num2 = " + num2);

        int num3 = 1024 * 1024 * 1024;
        System.out.println("num3 = " + num3);

        int num4 = 1024 * 1024 * 1024 * 1024;
        System.out.println("num4 = " + num4); // 0 ??超了int范围

        double d = 1024d * 1024 * 1024 * 1024;
        System.out.println("d = " + d);

        double dw = 1024 * 1024 * 1024 * 1024 ;
        System.out.println("dw = " + dw); // 0.0 ??没超double范围
  • 写回答

5条回答 默认 最新

  • 檀越@新空间 2024-03-01 13:02
    关注

    鱼悠奕 下午好🌅🌅🌅
    本答案参考通义千问

    你的代码中,int 类型的变量 num4 在计算后结果超过了 int 类型的最大值,所以会自动转换为 int 的最大值(在Java中是 Integer.MAX_VALUE,等于 2147483647),然后变成 0。这是因为当一个 int 超出其范围时,它会被"截断"到该范围内的最大值。

    同样地,double 类型的变量 dw 也存储了这个大数值,但是由于 double 类型可以表示更大的范围,所以它不会变成 0,而是保留了这个数值,大约是 1073741824

    解决方案如下:

    1. 使用 long 类型存储大数值:long 类型可以存储比 int 更大的整数,不会溢出。
    int num1 = 1024;
    System.out.println("num1 = " + num1);
    
    int num2 = 1024 * 1024;
    System.out.println("num2 = " + num2);
    
    int num3 = 1024 * 1024 * 1024;
    System.out.println("num3 = " + num3);
    
    // 使用 long 存储 num4
    long num4 = 1024 * 1024 * 1024 * 1024;
    System.out.println("num4 (long) = " + num4); // 输出大数值
    
    double d = 1024d * 1024 * 1024 * 1024;
    System.out.println("d = " + d);
    
    double dw = 1024 * 1024 * 1024 * 1024;
    System.out.println("dw = " + dw); // 输出大数值
    
    1. 如果你需要精确地表示这个数值,可以使用 BigInteger 类,它专门用来处理大整数。
    import java.math.BigInteger;
    
    int num1 = 1024;
    System.out.println("num1 = " + num1);
    
    int num2 = 1024 * 1024;
    System.out.println("num2 = " + num2);
    
    int num3 = 1024 * 1024 * 1024;
    System.out.println("num3 = " + num3);
    
    // 使用 BigInteger 存储 num4
    BigInteger num4 = BigInteger.valueOf(1024 * 1024 * 1024 * 1024);
    System.out.println("num4 (BigInteger) = " + num4); // 输出大数值
    

    这样,num4dw 就不会显示为 00.0 了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 3月9日
  • 已采纳回答 3月1日
  • 创建了问题 3月1日