无限循环 Vs.溢出的循环?

Infinite loop Vs. A loop that overflows?

提问人:TorusWithSprinkles 提问时间:10/13/2021 更新时间:11/18/2023 访问量:146

问:

我正在学习 Java 中的有符号类型与无符号类型,遇到了一个让我感到困惑的棘手示例问题:

Is the following code an infinite loop? Why or why not?

for(long x = 0; x != -1; x++) {
    System.out.println("Hello world!)";
}

乍一看,它显然是无限的,但是由于 long 是一种有符号类型,我认为它会溢出并最终达到 -1 是否正确?然后循环会结束吗?

问题是我无法真正测试它,因为它太大了。

迭代 无限循环 无符号 无符号整数

评论

0赞 Alexander 10/13/2021
“问题是我无法真正测试它,因为它太大了。这就是重点。有一整套循环在技术上是有限的,但迭代次数太多,以至于它们被解构为无穷大。这是其中一种情况。
0赞 TorusWithSprinkles 10/13/2021
@Alexander好吧,所以从技术上讲,这个是有限的?这是一堂课中的一个问题,专门讨论有符号数据类型与无符号数据类型以及它们在迭代时如何溢出,我将如何回答这个问题?你认为它是在谈论“技术”有限,还是像你提到的“解因子无限”?在这一点上,这似乎几乎是一个棘手的问题。
0赞 Alexander 10/13/2021
这绝对是一个棘手的问题。正确答案取决于他们对真正的无限与事实上的无限的迂腐程度。以每纳秒的迭代速率计算,这个循环将需要292年才能结束。您可以通过将初始值设置为 来确切地查看溢出时发生的情况,例如,xLong.MAX_VALUE - 10

答:

0赞 Kovalex 11/18/2023 #1

看起来您的测试是用 Java 编写的。 如果是,那么很好的讨论就在这里:Java 如何处理整数下溢和溢出,您将如何检查它?