2017-06-05 64 views
4

我正在運行這個無限的for循環。爲什麼for循環在一段時間後終止?爲什麼這個無限循環在一段時間後終止?

for(int i = 10; i > 0; i++) { } 

但是,如果我在這個for循環中打印一些東西,那麼它不會終止。爲什麼這樣?

+0

檢查此解決方案的問題: https://stackoverflow.com/a/44376523/5169186 – Oghli

回答

13

當它達到2,147,483,647時,int繞回到-2,147,483,648。

這會導致條件i > 0評估爲false

這是在Java中完美定義的行爲:您不能在C或C++中執行此操作。

如果您試圖在循環中打印某些東西,那麼循環的速度會大大降低,並且您可能沒有耐心了。將當前值i合併到您的輸出中,並親自查看:即使每秒輸出1000次迭代也需要將近一個月的時間才能達到迴繞點!

+0

那麼,爲什麼當你打印的東西不停止? – VK321

+2

我補充說。它最終會停止。 – Bathsheba

+0

很好的回答! 這將證明你的答案:https://stackoverflow.com/a/44376523/5169186 – Oghli

1

算術整數運算是以32位精度執行的。當一個操作的結果值大於32位(int變量可以容納的最大值)時,只考慮低32位,並丟棄高位。當MSB(最高有效位)爲1時,該值被視爲負值。 在你的情況下,當它變​​成負面和條件成爲虛假。