假设你有两个32位DWORD x和y,你怎么能检测它们的总和是否会导致溢出,但是没有求助于本机程序集来检查进位标志。我喜欢算术或二元运算符。我想可能有一些测试方法来解决它。感谢
答案 0 :(得分:5)
为什么不测试总和?
DWORD sum = x + y;
bool const overflow = (sum < x);
答案 1 :(得分: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;
}