簡體   English   中英

為什么這是一個帶有無符號整數的 for 循環?

[英]Why is this for loop with an unsigned int endless?

for (unsigned i = 0; i < 3; i++) {
    if (i == 2) i = -1;
}

我不明白為什么這個循環是無限的。 我知道當i = -1但 UINT_MAX 大於 3 時它會環繞。

如果我重寫您的代碼,那么可能會更清楚地了解原因

unsigned i = 0;
while (i < 3) {
    if (i == 2) i = -1;
    i++;
}

i++發生在循環的末尾,所以i變成了0

因為一旦i變成2它將變為0然后使用i++ ,循環繼續直到再次i=2 ,因此它再次變為0並且相同的過程將繼續。

如果你想在循環的條件下

for (unsigned i = 0; i < 3; i++) {
    if (i == 2) i = -1;
}

有比較UINT_MAX3你應該寫

for (unsigned i = 0; i < 3; i++) {
    if (i == 2) i = -2;
}

在這種情況下,增加i你會得到UINT_MAX 否則,如果i已經包含UINT_MAX則在循環表達式i++增加它,您將得到 0,結果是一個無限循環。

或者你可以寫例如以下方式

for (unsigned i = 0; i < 3; i++) {
    if (i == 2) i = ~i;
}

因為for循環會按照這個安排執行

for (unsigned i = 0; i < 3; i++)

1>>僅在第一次迭代時的初始值 (i=0) 2>>檢查終止條件

(i<3)

3>>執行代碼

(if(i==2) i=-1) 

4>>增量步 i++ 所以(我總是變為零)為(-1+1=0)所以這個循環是無限循環

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM