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

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

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

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

    随便打个 err 也比 ------- 强 2^31 倍
    champloo
        10
    champloo   145 天前
    @xiangyuecn 哈哈,好得老哥!我记住了
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1082 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 20ms · UTC 19:18 · PVG 03:18 · LAX 11:18 · JFK 14:18
    ♥ Do have faith in what you're doing.