在我当前的32位应用程序中,我通过对64位整数进行操作来检查(非常偶尔)溢出。
但是,在64位系统上似乎没有标准的128位整数。是否有一种检查溢出的简单方法,或者获得128位整数的方法,它适用于所有操作系统和编译器?
我尝试使用GMP作为更通用的解决方案,但它对我的要求来说有点重量级。
效率不是太重要,没有特定于处理器的ASM。
答案 0 :(得分:3)
这个问题的大部分讨论都适用:
How to detect integer overflow?
用于32位溢出chacking的许多技术也适用于64位(并非所有讨论的技术都使用下一个更大的整数类型来处理溢出)。
答案 1 :(得分:2)
this document详细讨论了捕获溢出(在c中)。我不知道在C ++中是否有更好的方法可以做到这一点。
答案 2 :(得分:1)
一种解决方案是在64位int周围创建一个类,它会在执行操作之前覆盖要检查的算术运算符。
我不记得我的头脑中的operatorX语法(很久以前我从C ++切换到Java)但是样本会是:
int64 myint64::add (int64 a, int64 b) {
if (MAX_INT64 - a > b) {
// error condition here.
}
return a + b;
}
int64 myint64::mul (int64 a, int64 b) {
if (MAX_INT64 / a > b) {
// error condition here.
}
return a * b;
}
类似于任何其他算术运算,尽管对于非基本函数,例如幂,阶乘等,这可能变得非常复杂。
但是,如果你从基本的算术构建块构建它们,它们就可以工作。