【发布时间】:2019-05-07 01:17:11
【问题描述】:
我的理解是java中的long最大值为2^63-1。有什么想法为什么在长时间存储 50000^2=2500000000 时我得到 -1794967296 考虑到 2500000000 小于 2^63-1?谢谢
long l = 50000 * 50000;
System.out.println(l);
我预计输出为 2500000000,但实际输出为 -1794967296。
【问题讨论】:
-
这不是长溢出,它是 int 溢出,因为您正在执行 int 乘法。您使用的是 int 文字,而不是 long 文字。
-
50000 * 50000!=50000L * 50000L -
int 加法发生在哪里?
-
50000是int文字而不是long所以你正在做int*int这也是int(无论使用和接收的值如何,这就是发生溢出的原因)。试试50000L*50000L。 -
好的。那行得通。我如何为变量做到这一点?例如:长 l = 50000;长 n = l * l;
标签: java long-integer integer-overflow