如何检测 C++ 中的整数溢出?

c++server side programmingprogramming

唯一安全的方法是在溢出发生之前检查溢出。但是,有一些检查整数溢出的黑客方法。因此,如果您想要检测无符号整数加法中的溢出,则可以检查结果是否实际上小于任一值加法。例如,

unsigned int x, y;
unsigned int value = x + y;
bool overflow = value < x; // 或者"value < y"也应该有效

这是因为,如果 x 和 y 都是无符号整数,如果相加并且它们溢出,它们的值就不能大于其中任何一个,因为它需要大于最大可能的无符号整数才能绕过并领先于这些值。

另一种方法是尝试访问 CPU 中的溢出标志。一些编译器提供了对它的访问,然后您可以对其进行测试,但这不是标准。

还有其他方法可以实现这一点,但它们仅提供估算值。您可以在此处查看它们 − https://stackoverflow.com/a/199455/3719089


相关文章