当前位置: 首页 > 知识库问答 >
问题:

""运算符如何溢出?[重复]

谷彦君
2023-03-14

我对Java中System.nanoTime()方法的留档中的以下语句很感兴趣:

long t0 = System.nanoTime();

...

long t1 = System.nanoTime();

应使用t1-t0

资料来源:http://docs.oracle.com/javase/7/docs/api/java/lang/System.html#nanoTime()

为什么是t1

共有2个答案

狄兴业
2023-03-14

除了immibis所说的之外,该消息来源还解释了

    long t1 = Long.MAX_VALUE;
    long t2 = Long.MIN_VALUE;
    //should have the same result with small longs, but is different when rotating from max value to min value of Long
    System.out.println(t1 - t2 < 0); //true
    System.out.println(t1 < t2); //false

    //should have the same result
    System.out.println(t1 - t2 > 0); // false
    System.out.println(t1 > t2); //true

    System.out.println(t2 - t1); // 1 => 1 nanosecond of difference

由于纳米级的时间可以超过“长”的大小,当时间达到最大值时,它又开始变为最小值。因此,MAX\u值和MIN\u值之间有1毫微秒的差异

公羊向荣
2023-03-14

不是那样的

十六进制中的示例,因为十六进制中溢出很明显。

假设您调用系统。nanoTime(),结果是0x7FFFFFFF00000000。这非常接近长的最大值。这是t1。

几秒钟后,您再次调用它,并获得0x8000000011111111。这非常接近long的最小值-这意味着它比您获得的第一个值小得多!这是t2

如果选中t2

如果计算差值t2-t1,这也会溢出,但这总是会抵消第一次溢出(如果有)。结果是0x000000011111111,这是正确的时差。这大于0,因此t2-t1

 类似资料:
  • 我只是想知道,谁负责处理计算机中的数学溢出案例? 例如,在以下C代码中: 在我的机器上编译并运行这段代码得到了-32767的结果 “short”变量的大小为2字节。。我们知道2个字节可以容纳32767的最大十进制值(如果有符号的话)。。所以当我把32768分配给x。。超过其最大值32767。。它开始从-32767再次计数到32767,以此类推。。在这种情况下,到底发生了什么,所以给出了-32767

  • 我已经尝试了所有的方法,如果你不选择“ST”,它会不断地在while循环中循环。我不知道该怎么办,如果有人能告诉我,那将非常有帮助。我在顶部添加了一些上下文代码;我只需要while循环的帮助。我正在使用循环,因此如果他们没有选择给定的位置,他们必须重新选择。 这是我的密码:

  • 可能重复: 之间的差异 有人能解释一下

  • 问题内容: 我有以下代码 从2.2开始,我收到了折旧警告,有什么想法可以解决此问题? 我有这个解决方案: 但这不是很好。 问题答案: 怎么样: 看来您可能正在执行类似时钟算术的操作。如果是这样,那么可以更好地理解这一点:

  • Rust可以让我们对某些运算符进行重载,这其中大部分的重载都是对std::ops下的trait进行重载而实现的。 重载加法 我们现在来实现一个只支持加法的阉割版复数: use std::ops::Add; #[derive(Debug)] struct Complex { a: f64, b: f64, } impl Add for Complex { type Outpu

  • 问题内容: 我最近开始自学游戏编程。有人建议我从Python入手,然后得到一本书“从Python和Pygame开始游戏开发:从新手到专业”。我参加了他们讲授Vectors并创建Vector2类的部分。一切都进行得很好,直到我试图让除法运算符超载。我的代码是这样的: 现在,当我尝试调用“ /”运算符时,将显示: 这就是Python 3.3的全部内容,但是如果我将其与Python 2.7一起运行,则一