V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
champloo
V2EX  ›  Java

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

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

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

    随便打个 err 也比 ------- 强 2^31 倍
    champloo
        10
    champloo  
    OP
       2019-08-26 18:59:05 +08:00
    @xiangyuecn 哈哈,好得老哥!我记住了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   898 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 22:01 · PVG 06:01 · LAX 14:01 · JFK 17:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.