2

假设您有两个 32 位 DWORD x 和 y,您如何检测它们的总和是否会导致溢出,而​​无需借助本机汇编来检查进位标志。我想要算术或二元运算符的东西。我想可能有一些测试方法可以解决这个问题。谢谢

4

2 回答 2

5

为什么不测试总和?

DWORD sum = x + y;
bool const overflow = (sum < x);
于 2012-02-05T10:30:57.073 回答
1

如果我错过了任何情况(这在遵循 C++98 或更新标准的编译器中不起作用),应该非常节省假设,告诉我:

int overflowSum(DWORD a, DWORD b) {
     return (b > 0) ? (a + b < a) : (a + b > a);
}

如果你认为你的 DWORD 是无符号的,你可以简化它:

int overflowSum(DWORD a, DWROD b) {
    return a + b < a;
}
于 2012-02-05T10:32:48.530 回答