C ++中一个奇怪的运行时错误

时间:2015-02-22 06:37:44

标签: c++

#include <iostream>
#include <string.h>
using namespace std;

int testMul(int a, int b)
{
    return !a || a * b / a == b;
}

int main()
{
    int a, b;
    while(cin >> a >> b) cout << testMul(a, b) << endl;
    return 0;
}

当输入

  

-1 -2147483648

,存在运行时错误。除以0? 我觉得这很棒。

顺便说一下,有没有人总结出一种可以判断乘法是否有溢出的方法?

1 个答案:

答案 0 :(得分:1)

当你将-1-2147483648相乘时,你会得到有符号的溢出,这是C ++中未定义的行为,结果可能是任何,直到你的计算机着火。因此,将零除以实际上并不是结果的坏处。