在我当前的 32 位应用程序中,我(非常偶尔)通过对 64 位整数进行操作来检查溢出。
但是,在 64 位系统上似乎没有标准的 128 位整数。有没有一种检查溢出的简单方法,或者一种获取 128 位整数的方法,它适用于所有操作系统和编译器?
我尝试使用 GMP 作为更通用的解决方案,但它对我的要求来说有点重量级。
效率并不太重要,没有特定于处理器的 ASM 是。
本文档详细讨论了捕获溢出(在 c 中)。我不知道在 C++ 中是否有更好的方法来做到这一点。
一种解决方案是围绕 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;
}
对于任何其他算术运算类似,尽管这对于诸如幂、阶乘等非基本函数可能会变得非常复杂。
但是,如果您从基本的算术构建块构建它们,它们就会起作用。