Java int 和 long 进行运算时,发生的奇怪事情

2019-08-25 19:21:24 +08:00
 champloo

https://wx3.sinaimg.cn/mw690/b9fb8c4dgy1g6c4zr2tdqj20wh0p6mzb.jpg https://gist.github.com/purechamploo/56acb2f654cde585654993d8c82f325e https://wx4.sinaimg.cn/mw690/b9fb8c4dgy1g6c4zrj5hxj20wp0q9aca.jpg

5569 次点击
所在节点    Java
10 条回复
champloo
2019-08-25 19:22:39 +08:00
图我贴在这里
champloo
2019-08-25 19:22:46 +08:00
champloo
2019-08-25 19:25:04 +08:00
对不起各位老哥,发了两次帖子,我不懂为啥评论可以直接发图,而帖子内容不可以
还有那个文字,我之前发的文字被空格缩进了,所以我用 gist 写的有空行的文字
0x000000000
2019-08-25 19:32:07 +08:00
int 溢出了吧
champloo
2019-08-25 19:34:02 +08:00
@0x000000000 蟹蟹老哥回复,long 和 int 进行计算,会把 int 先转为 long,再计算,所以感到很奇怪
lhx2008
2019-08-25 19:35:37 +08:00
虽然不知道楼主在说什么,但是你用一个 int * 一个字面值 肯定是出 int,long 不是看你结果的类型的
0x000000000
2019-08-25 19:43:35 +08:00
@champloo #5 86399999 这里计算出来的值已经溢出了,是个负数,然后转换成 long 也一样啊,我的理解哈
champloo
2019-08-25 19:43:59 +08:00
@lhx2008 @0x000000000 蟹蟹回复,确实如你们所说,是 int 精度溢出的问题
解决了!是 int 精度溢出的问题,因为会先进行乘法运算!
xiangyuecn
2019-08-25 19:46:21 +08:00
25*86399999L 正常 long 值,所以没有错误 log 输出

25*86399999 int 溢出,成负数,所以输出了错误 log

随便打个 err 也比 ------- 强 2^31 倍
champloo
2019-08-26 18:59:05 +08:00
@xiangyuecn 哈哈,好得老哥!我记住了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/594959

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX