【发布时间】:2022-01-09 02:45:21
【问题描述】:
我知道大于INT64_MAX的数字会环绕负数,那么当sum溢出时如何比较,即sum大于INT64_MAX。
#include <iostream>
using namespace std;
int main() {
int64_t a = INT64_MAX;
int64_t b = 1;
// cin >> a >> b;
if (a + b <= INT64_MAX) {
cout << "Yes" << endl;
} else {
cout << "No" << endl;
}
return 0;
}
【问题讨论】:
-
我知道大于 INT64_MAX 的 int64 会环绕负数 不一定。
uint64_t将回绕为 0。但有符号整数类型的溢出行为是未定义的。 -
I know int64 greater than INT64_MAX will wrap around negative,- 你知道错了。这是未定义的行为。 -
从
INT64_MAX中减去一个操作数,看看结果是否大于第二个操作数。 -
预测
a + b是否会溢出的常用方法是检查MAX - a是否大于b,尽管如果a或b可能为负数,你必须小心. -
您有 2 个溢出需要避免,正面是
INT64_MAX,反面是INT64_MIN。