2011-11-18 60 views
0

在在越來越大聲張貼一個愚蠢的問題的風險:unsigned int的算術 - 初學者ç

說我有下面的代碼片段:一個unsigned int類型之間

unsigned int limit = 4294967296; 
int math = 50000; 

while(limit > 50000) 
{ 
    limit = limit - math; 
    printf("new limit is - \t%u\n", limit); 
} 

會做算術一個int類型有內存使用rammifications?我知道一個無符號的int有一個數量級更多的內存(2^31爲int vs 2^32爲unsigned int),但是,因爲我使用我的unsigned int作爲佔位符,我認爲我正在否定溢出的危險。

我會自己運行這個,但是我現在沒有可訪問的linux盒子。

對此的任何輸入將不勝感激。

+2

如果在這裏有問題會更容易。 –

+0

我不確定你確切的問題,但是你可能會發現這個網站很有幫助。 http://ideone.com/ – rogerlsmith

+0

那麼什麼是「問題」? –

回答

0

這將永遠循環,因爲你最終將環繞(即limit永遠不會小於0)......這是你的問題嗎?

+0

與小於零有什麼關係? OP的設置很好,只要她的'unsigned int'類型足夠大到最初的數字。 (在我的平臺上,我必須切換到'unsigned long long int'。) –

+3

循環不檢查它是否小於0,而是小於或等於50000.因此它最終會終止。 –