为了账号安全,请及时绑定邮箱和手机立即绑定

使用 System.nanoTime() 时比较如何导致数值溢出

使用 System.nanoTime() 时比较如何导致数值溢出

慕码人8056858 2021-05-30 15:39:35
我在System.nanoTime()的 android 文档中找到了以下指南由于数值溢出的可能性,应该使用 t1 - t0 < 0,而不是 t1 < t0。我真的很好奇比较会如何导致溢出。据我所知,当我们接近最高表示时会发生知识溢出,并且由此产生的计算结果比可以实现的值更高。
查看完整描述

1 回答

?
繁华开满天机

TA贡献1816条经验 获得超4个赞

我认为溢出不会发生在比较中,而是发生在时钟值中,每 2^63 纳秒周期一次,这可能随时发生,因为它任意固定的原点(对于给定的虚拟机)


// say the clock value happens to be Long.MAX_VALUE - 10

long ts1 = 9223372036854775797L;


// 100 ns later it has overflowed (it is now negative)

long ts2 = ts1 + 100;


System.out.println("ts2 - ts1 > 0 : " + (ts2 - ts1 > 0));

System.out.println("ts2 > ts1 : " + (ts2 > ts1));

结果是:


ts2 - ts1 > 0 : true

ts2 > ts1 : false  <-- not correct


查看完整回答
反对 回复 2021-06-02
  • 1 回答
  • 0 关注
  • 272 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信