gpt4 book ai didi

c++ - 是否可以构造一个通用程序来判断二元运算是否会导致溢出?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:19:01 25 4
gpt4 key购买 nike

我很好奇,是否可以编写一个像这样的包罗万象的实现

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() 对类型进行加法与附加假设一起定义,即至少有一个 ab是非负的。 (可能有一种方法可以解决它,但我没有看到一个简洁的方法。)

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;
}

关于c++ - 是否可以构造一个通用程序来判断二元运算是否会导致溢出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29267787/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com