why is 24 * 60 * 60 * 1000 * 1000 divided by 24 * 60 * 60 * 1000 not equal to 1000 in Java?

前端 未结 3 1391
情书的邮戳
情书的邮戳 2020-12-06 05:26

why is 24 * 60 * 60 * 1000 * 1000 divided by 24 * 60 * 60 * 1000 not equal to 1000 in Java?

相关标签:
3条回答
  • 2020-12-06 06:26

    If you want to perform that calculation, then you must either re-order the operations (to avoid overflow) or use a larger datatype. The real problem is that arithmetic on fixed-size integers in Java is not associative; it's a pain, but there's the trade-off.

    0 讨论(0)
  • 2020-12-06 06:31

    Because the multiplication overflows 32 bit integers. In 64 bits it's okay:

    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
       }
    }
    

    Obviously after the multiplication has overflowed, the division isn't going to "undo" that overflow.

    0 讨论(0)
  • 2020-12-06 06:31

    You need to start with 24L * 60 * ... because the int overflows.

    Your question BTW is a copy/paste of Puzzle 3: Long Division from Java Puzzlers ;)

    0 讨论(0)
提交回复
热议问题