我很好奇,是否有可能编写一个无所不包的实现,例如
template <typename T>
bool overflows(T a, T b)
{
// ... Returns true or false depending on whether a+b overflows
}
????
如果不是,至少有人可以告诉我如何编写实现
bool overflows (unsigned int a, unsigned int b)
{
// ... returns true or false depending on whether a+b > ~0
}
???
由于我没有计算机科学学位,因此尽管我了解溢出的概念(如果我们的数字范围为0,1,。),但是我对程序应该如何处理溢出没有任何正规的教育。 ..127,则在64 + 64、65 + 63、66,62等上,“+”操作不起作用)
最佳答案
由于您只是在询问加法,因此您可以针对定义了numeric_limits<T>::max()
的类型进行加法操作,并假设a
和b
中至少有一个是非负数。 (可能有一种解决方法,但我看不到简洁的方法。)
template <typename T>
bool overflows(T a, T b)
{
if(a < b) return overflows(b,a);
//Since we assumed at least one is non-negative, this now makes sense.
return b < std::numeric_limits<T>::max() - a;
}