有人可以(详细地)向我解释如何将两个 __int64 objs 相乘并检查结果是否适合 __int64。
注意:不要使用任何依赖于编译器或处理器的例程。
最佳答案
不假设 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)
就足够了。
关于c++ - 乘以 __int64,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5840529/