Multiplying __int64's

狂风中的少年 提交于 2019-12-22 09:12:05

问题


Can someone explain to me (in detail) how to multiply two __int64 objs and check if the result will fit in __int64.

Note: Do not use any compiler or processor dependent routines.


回答1:


not assuming a and b are positive:

__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;

EDIT: Adding corner cases to code.

EDIT: In my opinion just ( a && a * b / a != b) is enough.



来源:https://stackoverflow.com/questions/5840529/multiplying-int64s

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!