检测32位双字+双字携带/ C ++

时间:2012-02-05 10:28:53

标签: c++ c overflow addition dword

假设你有两个32位DWORD x和y,你怎么能检测它们的总和是否会导致溢出,但是没有求助于本机程序集来检查进位标志。我喜欢算术或二元运算符。我想可能有一些测试方法来解决它。感谢

2 个答案:

答案 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;
}