我正在运行一个在 for 循环中添加数字的 C++ 程序:
int y = 0;
for (int i=0; i<NUM; i++) {
int pow = 1;
for (int j=0 j<i; j++) {
pow *= 10;
}
y+= vec[i]*pow; // where vec is a vector of digits
}
但我不确定如何检查是否发生了溢出。有办法吗?
最佳答案
作为彼得正确 explained , 溢出是undefined behavior 标准 C++11(或 C99),你真的应该是 afraid of UB .
但是,一些编译器为您提供了处理和检测整数溢出的扩展。
如果您可以限制自己使用最近的 GCC编译器,你可以使用它的 integer overflow builtins .
您也可以限制自己使用 int32_t
并在 int64_t
中计算算术并检查上面的结果 INT32_MAX
或以下INT32_MIN
.这可能比使用特定于编译器的扩展更慢(但更便携)。顺便说一句,一些编译器也有一些 __int128_t
类型(因此您可以在 __int128_t
中计算算术并同样检查结果是否适合 int64_t
)。
如果你的目标是拥有arbitrary precision arithmetic ,最好使用一些现有的 bignum 库,比如 GMPlib (因为高效 bignum 算术需要非常聪明的算法)。
关于c++ - 检查 C++ 中的 int 溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33185621/