解析长到负数

hgu*_*ser 3 java math numbers long-integer

码:

public class Main{
    public static void main(String[] a){
        long t=24*1000*3600;
        System.out.println(t*25);
        System.out.println(24*1000*3600*25);
    }
}
Run Code Online (Sandbox Code Playgroud)

这打印:

2160000000

-2134967296
Run Code Online (Sandbox Code Playgroud)

为什么?


感谢所有的答复.

是数字后使用L的唯一方法吗?

我试过了,(long)24*1000*3600*25但这也是消极的.

Alb*_*gni 19

你达到了最大的int类型是Integer.MAX_VALUE2 ^ 31-1.它因此包裹,因此显示负数.

有关此的即时解释,请参阅此漫画:

替代文字


Ade*_*ari 11

要清楚地解释清楚,

System.out.println(24*1000*3600*25);
Run Code Online (Sandbox Code Playgroud)

在上面的陈述实际上是int文字.要将它们视为long文字,你需要将它们作为后缀L.

System.out.println(24L*1000L*3600L*25L);
Run Code Online (Sandbox Code Playgroud)

警告,一个小l就足够了,但看起来像资本I1有时.资本I在这里没有多大意义,但阅读它1确实可以给你带来困难.此外,即使是足够的单一价值L也会产生结果long.


Las*_*olt 6

在第一种情况下,您正在打印,long但在第二种情况下,您将其打印为int.

并且int范围从:-2 ^ 31到2 ^ 31 - 1,它正好在你计算的范围之下(int max:2147483647 you:2160000000),所以你将int溢出到负范围.

您也可以强制使用第二个long:

System.out.println(24L*1000*3600*25);
Run Code Online (Sandbox Code Playgroud)