如果Java中提供了偶数,为什么应该是无限的while循环会终止
好的,这是我的问题。当我使用如果Java中提供了偶数,为什么应该是无限的while循环会终止,java,Java,好的,这是我的问题。当我使用5初始化x时,while循环不会终止,但使用偶数(如6初始化它)会终止循环: int x = 6; while(x != 0){ x = x + 2; } 令我惊讶的是,尽管我认为它不会终止。但是,以下类似的循环,x循环的奇数值为无限: int x = 5 while(x != 0){ x += 2; } 这似乎只发生在Java中的而循环中,因为我在for循环中并没有得到类似的结果。请帮我解释一下,因为我现在很困惑。谢谢整数溢出在214748364
5
初始化x
时,while循环不会终止,但使用偶数(如6
初始化它)会终止循环:
int x = 6;
while(x != 0){
x = x + 2;
}
令我惊讶的是,尽管我认为它不会终止。但是,以下类似的循环,x循环的奇数值为无限:
int x = 5
while(x != 0){
x += 2;
}
这似乎只发生在Java中的
而循环中,因为我在for
循环中并没有得到类似的结果。请帮我解释一下,因为我现在很困惑。谢谢整数溢出在2147483647,如果您添加1,它将转到-2147483648。所以当你们从偶数开始,你们会再次回到零。但当你从奇数开始时,你永远不会回到零。这里没有深入讨论,但这是因为溢出。整数是32位的,所以它是有限数量的数字。由于它的签名,这意味着数字的范围从−2.147.483.648至2.147.483.647。所以在这个例子中:2.147.483.647+1=-2.147.483.648是一个溢出
这意味着如果你的while循环中有x+1,那么它将永远终止。因为一旦达到0,while循环条件就会中断。如果你加上2,这似乎是可行的,因为数字x在某一点上达到了0
希望这对伴侣有帮助。你可以在普通的12小时挂钟上看到同样的效果。选择任何时间。在你达到12岁之前,再加上两个小时
你会注意到,如果你从一个偶数小时开始,你总是会停下来。例如,6:
6 + 2 = 8
8 + 2 = 10
10 + 2 = 12 // stop
然而,如果你从奇数小时开始,你永远不会停止。例如:
5 + 2 = 7
7 + 2 = 9
9 + 2 = 11
11 + 2 = 1
1 + 2 = 3
3 + 2 = 5
5 + 2 = 7
...
Javaint
的工作方式相同,但它的值不是12小时,而是2^32=4294967296。它不是从12包装到1,而是从2147483647包装到-2147483648
请注意,for
循环的行为方式是相同的:for(intx=6;x!=0;x+=2){}
确实会停止,而x=5
不会停止。整数溢出。在这种情况下,整数溢出和java不会引发异常。。。同样的情况也应该发生在for
循环中(假设相同的起始值、条件和增量)1)溢出没有异常或错误;2) 添加2并从偶数开始(以达到零)