【问题标题】:Multiplying 2 32 bit ints without integer overflow将 2 个 32 位整数相乘而不会溢出
【发布时间】:2021-06-24 15:53:47
【问题描述】:

我想将 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;

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

【问题讨论】:

  • Tangent:更喜欢 static_cast<long long>(i) 而不是 C 风格的演员表。

标签: c++ integer-overflow


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2012-03-16
    • 1970-01-01
    • 1970-01-01
    • 2016-01-22
    • 2011-02-12
    • 1970-01-01
    • 2015-04-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多