作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
有人可以(详细地)向我解释如何将两个 __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/
我正在尝试在 Matlab 中使用 mex 编译一个库。我能够部分编译这个东西,但是在最后一个文件中,mex 给出了关于两行的错误: typedef __int64 LONG64; typedef _
我很惊讶地发现我的 C++ 编译器还支持 __int8、__int16、__int32 和 __int64;但我只看到它们等同于 char、short、int 和 long long。它们有什么区别?
我是一名优秀的程序员,十分优秀!