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