繁体   English   中英

在没有整数溢出的情况下乘以 2 个 32 位整数

[英]Multiplying 2 32 bit ints without integer overflow

我想要多个 2 个正符号 32 位整数ij 最坏的情况是当ij都是INT_MAX ,它们的乘积在 64 位整数的限制内,但是当我执行操作时

int i = INT_MAX;
int j = INT_MAX;
long long int res = i * j;

由于整数溢出,我得到了垃圾。 所以我通常通过将ij转换为long long int来解决这个问题

int i = INT_MAX;
int j = INT_MAX;
long long int res = (long long int)i * j;

这是此问题的典型解决方法吗? 还有其他更好的方法吗?

您的解决方案是正确的,并且足够标准,质量编译器会识别它。 一些 CPU 具有专用的 32x32->64 乘法指令,尽管进行了转换,您可以合理地期望编译器使用这样的指令。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM