首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >System.nanoTime()变为负值

System.nanoTime()变为负值
EN

Stack Overflow用户
提问于 2014-01-24 17:51:09
回答 3查看 3.8K关注 0票数 5

当试图使用System.nanoTime()调查各种任务的运行时,当输入数据集足够大时,该值变为负值。

使用的示例代码如下:

代码语言:javascript
复制
long start = System.nanoTime();
run();
long stop = System.nanoTime();

int diff = (int) (stop-start);
System.out.println(data_size+", "+diff);

在一个越来越大的数据集中调用run()时,输出如下所示:

代码语言:javascript
复制
1, 80000
10, 4310000
50, 48077000
100, 171363000
250, 1061924000
500, 14018704
750, 998074408
1000, -41025184
1500, -81710664
2000, -273795736
2500, 768997600
3000, -39161248

这对任何人来说都有意义吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-01-24 17:53:48

将两个long之间的差异转换为一个int。很可能,您的long差比Integer.MAX_VALUE长(大约20亿),转换到int需要最后32位,产生一个负数。此外,20亿纳秒仅为2秒,因此任何时间越长,int就会溢出。

将差异保留为long

票数 13
EN

Stack Overflow用户

发布于 2014-01-24 17:54:09

我想这是一个整数溢出问题。int范围为:

代码语言:javascript
复制
Integer.MAX_VALUE = 2147483647
Integer.MIN_VALUE = -2147483648

尝试使用long存储diff值:

代码语言:javascript
复制
long diff = stop - start;
票数 0
EN

Stack Overflow用户

发布于 2014-01-24 17:57:44

在Java中,int的最大数目(由32位表示)为2^31或2,147,483,647。正在发生的情况是,当差值大于这个数时,它不能用int和溢出来表示(没有位)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21339153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档