unsigned int相減的問題

前言

今天在洛谷上做一道題,題目不算難,但是有一個測試點一直是runtime error,大概就是程序崩潰導致的,但是我一直沒找到原因,而又暫時不能把測試點數據下載下來,因爲24小時內只能下載一次…後來終於等到可以下載了,調試之後發現是有兩個unsigned int型數據相減導致溢出的問題。害~

正題

unsigned int的最小值爲0,運算中低於0就會溢出,如同int型低於-2147483648就會溢出一樣,溢出後成爲正向最大值,這樣會讓程序運行產生不可預知的錯誤。因此unsigned int型數據作差時需要謹慎,如a、b都是unsigned int型數據,那麼計算a-ba<b時就會發生溢出。一種很容易發生的情況,也就是我上面提到的所遇到的情況:C++ STL容器都有一個size()成員函數,該函數的返回值都爲unsigned int型,如果稍不注意用兩個容器的size()返回值作差,那麼可能導致溢出。
解決方法:(1)使用條件判斷語句 c=a>b?a-b:b-a;
(2)在不會導致數據丟失的情況下,進行強制類型轉換。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章