【发布时间】:2013-06-29 14:14:21
【问题描述】:
现在 signed_int 最大值是 2,147,483,647 即 2^31 和 1 位是符号位,所以
当我运行long a = 2,147,483,647 + 1;
它给出a = -2,147,483,648 作为答案.. 这很好。
但是,24*60*60*1000*1000 = 86400000000(实际上)...
在 java 中,24*60*60*1000*1000 it equals to 500654080..
我知道这是因为整数中的溢出,但是是什么处理使这个值来的,Java使用了什么逻辑来获取该数字。我也refered here。
【问题讨论】:
-
这应该是你感兴趣的 - stackoverflow.com/q/12758338/1679863
-
这样想:
24*60*60*1000*1000 = (((24*60)*60)*1000)*1000并应用您在添加示例中执行的相同规则。 -
@jlordo 我想知道java是如何处理的
-
@Gru。你对什么过程感兴趣?去年我回答了一个类似的问题,我在之前的评论中已经链接了这个问题。你可以通过它。如果您仍有任何疑问,那么您可以要求澄清。
-
@RohitJain 类似?似乎完全一样。猜猜这个问题来自 Bloch 的益智文字。
标签: java math integer overflow long-integer