【发布时间】:2021-06-24 15:53:47
【问题描述】:
我想将 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;
这是解决此问题的典型解决方法吗?还有其他更好的方法吗?
【问题讨论】:
-
Tangent:更喜欢
static_cast<long long>(i)而不是 C 风格的演员表。
标签: c++ integer-overflow