1

在我当前的 32 位应用程序中,我(非常偶尔)通过对 64 位整数进行操作来检查溢出。

但是,在 64 位系统上似乎没有标准的 128 位整数。有没有一种检查溢出的简单方法,或者一种获取 128 位整数的方法,它适用于所有操作系统和编译器?

我尝试使用 GMP 作为更通用的解决方案,但它对我的要求来说有点重量级。

效率并不太重要,没有特定于处理器的 ASM 是。

4

3 回答 3

3

这个问题的大部分讨论都适用:

如何检测整数溢出?

许多用于 32 位溢出检查的技术也适用于 64 位(并非所有讨论的技术都使用下一个更大的整数类型来处理溢出)。

于 2008-10-15T13:34:44.437 回答
2

本文档详细讨论了捕获溢出(在 c 中)。我不知道在 C++ 中是否有更好的方法来做到这一点。

于 2008-10-15T13:09:14.957 回答
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;
}

对于任何其他算术运算类似,尽管这对于诸如幂、阶乘等非基本函数可能会变得非常复杂。

但是,如果您从基本的算术构建块构建它们,它们就会起作用。

于 2008-10-15T13:59:29.067 回答