乘以__int64

时间:2011-04-30 08:14:16

标签: c++ int64 uint64

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

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

1 个答案:

答案 0 :(得分:4)

不假设ab为正:

__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)即可。