我试图计算int的最大值,但是我无法弄清楚为什么转换为int的计算值低于转换为long时的计算值.我提出(2^31) - 1了计算器,价值是
2_147_483_647
Run Code Online (Sandbox Code Playgroud)
当我在Java中上升2^31和减去时,我会期望相同1,它应该计算int的最大数量2147483647,但事实并非如此.
System.out.println(((long) Math.pow(2, 31)) - 1);
System.out.println((int) Math.pow(2, 31) - 1);
Run Code Online (Sandbox Code Playgroud)
第一个计算给出: 2_147_483_647
第二次计算给出: 2_147_483_646
演员阵容优先于减法.你应该先做减法:
System.out.println((int) (Math.pow(2, 31) - 1));
Run Code Online (Sandbox Code Playgroud)
Math.pow(2, 31)是2_147_483_648一个类型double(因为Math.pow()返回一个double),这个数字不适合int.
当您将double 2_147_483_648转换为int时,它会被截断为int可以容纳的最大值(请参阅如何在Java中使用double转换为int).
强制转换将double截断2_147_483_648为int 2_147_483_647.
2_147_483_646.