V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
champloo
V2EX  ›  Java

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

  •  
  •   champloo · Aug 25, 2019 · 6231 views
    This topic created in 2449 days ago, the information mentioned may be changed or developed.
    10 replies    2019-08-26 18:59:05 +08:00
    champloo
        1
    champloo  
    OP
       Aug 25, 2019
    图我贴在这里
    champloo
        2
    champloo  
    OP
       Aug 25, 2019
    champloo
        3
    champloo  
    OP
       Aug 25, 2019
    对不起各位老哥,发了两次帖子,我不懂为啥评论可以直接发图,而帖子内容不可以
    还有那个文字,我之前发的文字被空格缩进了,所以我用 gist 写的有空行的文字
    0x000000000
        4
    0x000000000  
       Aug 25, 2019 via Android
    int 溢出了吧
    champloo
        5
    champloo  
    OP
       Aug 25, 2019
    @0x000000000 蟹蟹老哥回复,long 和 int 进行计算,会把 int 先转为 long,再计算,所以感到很奇怪
    lhx2008
        6
    lhx2008  
       Aug 25, 2019
    虽然不知道楼主在说什么,但是你用一个 int * 一个字面值 肯定是出 int,long 不是看你结果的类型的
    0x000000000
        7
    0x000000000  
       Aug 25, 2019
    @champloo #5 86399999 这里计算出来的值已经溢出了,是个负数,然后转换成 long 也一样啊,我的理解哈
    champloo
        8
    champloo  
    OP
       Aug 25, 2019
    @lhx2008 @0x000000000 蟹蟹回复,确实如你们所说,是 int 精度溢出的问题
    解决了!是 int 精度溢出的问题,因为会先进行乘法运算!
    xiangyuecn
        9
    xiangyuecn  
       Aug 25, 2019
    25*86399999L 正常 long 值,所以没有错误 log 输出

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

    随便打个 err 也比 ------- 强 2^31 倍
    champloo
        10
    champloo  
    OP
       Aug 26, 2019
    @xiangyuecn 哈哈,好得老哥!我记住了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2973 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 48ms · UTC 08:40 · PVG 16:40 · LAX 01:40 · JFK 04:40
    ♥ Do have faith in what you're doing.