2011-10-28 46 views
3

可能重複:
Best way to detect integer overflow in C/C++檢查溢出條件運算

我們該如何檢查,如果像加法,乘法還是減法任何運算可能導致溢出?

+0

我的問題是專門針對無符號整數 – pravs

+0

嚴格來說,無符號算術不會溢出;它以明確的方式環繞。但這只是對「溢出」這個詞的含義的一個諷刺,它並沒有回答你的問題。 –

回答

1

首先檢查操作數的大小,然後使用std::numeric_limits。例如,對於另外:

#include <limits> 

unsigned int a, b; // from somewhere 

unsigned int diff = std::numeric_limits<unsigned int>::max() - a; 

if (diff < b) { /* error, cannot add a + b */ } 

你一般不能可靠地檢測算術錯誤後的事實,所以你必須做之前,所有的檢查。

您可以很容易地對這種方法進行模板化,使其適用於任何數字類型。

+0

嗨,有沒有任何方法使用一些邏輯,而不使用任何模板來解決這個問題? – pravs

+0

我以爲你可以檢測後:'a + = b;如果(a

+0

@pravs:用'UINT_MAX'替換'std :: numeric_limits :: max()'' –