有人可以(详细)向我解释如何将两个 __int64 对象相乘并检查结果是否适合 __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)
足够了。