簡體   English   中英

為什么這個for循環進入無限循環執行?

[英]why this for loop goes in infinite loop executation?

看到我有一個像這樣的代碼

int main () {
    uint32_t i ;
    for(i=4;i>=0;i--)
            printf("i is %d \n",i);

    return 0;
}

它進入無限循環。 為什么我的價值低於0並且仍然循環進入執行?

uint32_t表示無符號整數,因此其值始終> = 0 - 因此您的循環無限執行。

請注意,許多編譯器將發出警告,指示i>=0比較始終為true。

您在printf看到負值,因為您將其打印為%d ,但在條件中, uint32_t始終為正(您正在執行溢出)。

您正在使用uint32_t表示無符號,然后檢查for循環中的條件i> = 0所以當循環執行值i = 0然后它使i = -1但是我是無符號所以它將使i的值INT_MAX(您的系統支持的任何內容)。 所以仍然值大於0所以條件為真。

並且它為i打印負值的答案是,您使用的是用於簽名的'%d'。

如果要查看結果,可以使用'%u'選項,這樣它將打印i的原始無符號值。

如果你想從程序中得到你想要的結果,那么在條件檢查時嘗試將uint轉換為int。

暫無
暫無

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

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