我知道數字大于INT64_MAX將環繞負數,那么如何在總和溢位時進行比較,即總和大于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;
}
uj5u.com熱心網友回復:
首先與加法中的b任一者INT64_MIN - a或INT64_MAX - a加法之前進行比較,以防止有符號整數溢位的未定義行為(UB)。
// True when sum overflows.
int is_undefined_add64(int64_t a, int64_t b) {
return (a < 0) ? (b < INT64_MIN - a) : (b > INT64_MAX - a);
}
最壞情況:2 比較。
對于div、mul、sub
uj5u.com熱心網友回復:
比較前,先a b看看會不會溢位。
int is_overflow(int64_t a, int64_t b) {
if (((b > 0) && (a > (INT64_MAX - b))) ||
((b < 0) && (a < (INT64_MIN - b)))) {
return 1;
}
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/371776.html
下一篇:由于“沒有選項-Wunused-command-line-argument”錯誤,CMakeLists.txt生成的makefile在MacOs上作業,但在linux上不起作用
