[英]Multiplying 2 32 bit ints without integer overflow
我想要多个 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 乘法指令,尽管进行了转换,您可以合理地期望编译器使用这样的指令。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.