是以下內容的高效和問題,免費的方式,一個unsigned int轉換爲int在C++:避免整數溢出在C++中將unsigned int轉換爲int的有效方法是什麼?
#include <limits.h>
void safeConvert(unsigned int passed)
{
int variable = static_cast<int>(passed % (INT_MAX+1));
...
}
還是有更好的辦法?
UPDATE
正如指出的詹姆斯McNellis它不是未定義分配一個unsigned int> INT_MAX整數 - 而這是實現定義。因此,此處的上下文現在特定於我的首選項,即當無符號整數超過INT_MAX時,確保此整數重置爲零。
原始上下文
我有一些用作櫃檯unsigned int類型的,但希望通過他們周圍的特定情況下的整數。
在正常操作下,這些計數將保持在INT_MAX的範圍內。但是爲了避免碰到
undefined
如果發生異常(但有效)的情況,實現特定的行爲我想在這裏進行一些有效的轉換。
應該是'safeConvert'?那麼,當輸入大於INT_MAX時,你想要發生什麼?在這種情況下你想要設置一些標誌嗎? – 2011-03-02 02:51:19
雖然在有符號算術期間溢出會產生未定義的行爲,但轉換爲有符號整數類型不會:如果值不能由目標類型表示,則結果是實現定義的。 – 2011-03-02 02:52:19
@Hamish感謝您的錯字捕捉。當輸入大於INT_MAX時,確保int值大於0爲好。 – 2011-03-02 02:55:09