为什么 24 * 60 * 60 * 1000 * 1000 除以 24 * 60 * 60 * 1000 在 Java 中不等于 1000?

2022-09-04 04:59:10

为什么 24 * 60 * 60 * 1000 * 1000 除以 24 * 60 * 60 * 1000 在 Java 中不等于 1000?


答案 1

因为乘法溢出 32 位整数。在64位中,没关系:

public class Test
{
    public static void main(String[] args)
    {
        int intProduct = 24 * 60 * 60 * 1000 * 1000;
        long longProduct = 24L * 60 * 60 * 1000 * 1000;
        System.out.println(intProduct); // Prints 500654080
        System.out.println(longProduct); // Prints 86400000000
   }
}

显然,在乘法溢出之后,除法不会“撤消”该溢出。


答案 2

您需要从24L * 60 * ...因为整型溢出。

您的问题BTW是Puzzle 3:来自Java Puzzlers的Long Division的复制/粘贴 ;)