c++ - 乘以 __int64

标签 c++ int64 uint64

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

注意:不要使用任何依赖于编译器或处理器的例程。

最佳答案

不假设 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) 就足够了。

关于c++ - 乘以 __int64,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5840529/

相关文章:

c++ - 使用新的Valgrind中的内存泄漏

asp.net - 如何在 JavaScript 中序列化 Int64 类型的变量而不损失准确性?

c - 将 uint8 数组合并到 uint64 错误

c++ - 奇怪的算术错误 - 255x256x256x256=18446744073692774400

powershell - 将输入变量转换为 Uint64

c++ - 创建动态二维数组的其他方法?

c++ - 将投影转换为正交光线转换

C++ : AL/altypes. h 没有那个文件或目录

python - 为什么数据透视表返回 Int64 类型错误?