4

有人可以(详细)向我解释如何将两个 __int64 对象相乘并检查结果是否适合 __int64。

注意:不要使用任何编译器或处理器相关的例程。

4

1 回答 1

4

不假设a并且b是积极的:

__int64 a,b;
//...
__int64  tmp_result = abs(a) * abs(b) ;
if (
    ( a && b ) &&
    (
     ( tmp_result < abs(a) || tmp_result < abs(b) ) ||
     ( tmp_result / abs(a) != abs(b)) ||
     ( a == TYPE_MIN && b != 1) ||
     ( b == TYPE_MIN && a != 1)
    )
   )
   std::cout << "overflow";
__int64 result = a * b;

编辑:将极端案例添加到代码中。

编辑:在我看来就( a && a * b / a != b)足够了。

于 2011-04-30T08:24:16.830 回答