コードにこれがあり、次の警告が発生しています。
long ans = ((long) INT_MIN) * 2 - 1;
私が得る警告は次のとおりです。
warning: integer overflow detected: op "*"
INT_MIN を使用できるように、limits.h を含めました。
#include <limits.h>
コードにこれがあり、次の警告が発生しています。
long ans = ((long) INT_MIN) * 2 - 1;
私が得る警告は次のとおりです。
warning: integer overflow detected: op "*"
INT_MIN を使用できるように、limits.h を含めました。
#include <limits.h>
これは、計算が の範囲をオーバーフローすることを意味しますlong
。符号付きオーバーフローにより、未定義の動作が発生します。
long
で表現できる値の範囲との値の間の唯一の相関関係は、として表現できるINT_MIN
ことです。2 倍未満の 1 つが として表現できるという保証はありません。INT_MIN
long
INT_MIN
long
Windows x86 では、Visual C++ コンパイラを使用すると、 と同じlong
4 バイトint
です。試すlong long