如何解决在没有整数溢出的情况下乘以 2 个 32 位整数
我想要多个 2 个有符号的 32 位整数 i
和 j
。最坏的情况是当 i
和 j
都是 INT_MAX
时,它们的乘积在 64 位整数的限制内,但是当我执行操作时
int i = INT_MAX;
int j = INT_MAX;
long long int res = i * j;
由于整数溢出,我得到了垃圾。所以我通常通过将 i
或 j
转换为 long long int
int i = INT_MAX;
int j = INT_MAX;
long long int res = (long long int)i * j;
这是解决此问题的典型方法吗?还有其他更好的方法吗?
解决方法
您的解决方案是正确的,并且足够标准,质量编译器会识别它。一些 CPU 具有专用的 32x32->64 乘法指令,尽管进行了强制转换,但您可以合理地期望编译器使用这样的指令。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。