1

コードにこれがあり、次の警告が発生しています。

long ans = ((long) INT_MIN) * 2 - 1;  

私が得る警告は次のとおりです。

warning: integer overflow detected: op "*"

INT_MIN を使用できるように、limits.h を含めました。

#include <limits.h>
4

2 に答える 2

4

これは、計算が の範囲をオーバーフローすることを意味しますlong。符号付きオーバーフローにより、未定義の動作が発生します。

longで表現できる値の範囲との値の間の唯一の相関関係は、として表現できるINT_MINことです。2 倍未満の 1 つが として表現できるという保証はありません。INT_MINlongINT_MINlong

于 2011-01-30T00:27:27.583 に答える
0

Windows x86 では、Visual C++ コンパイラを使用すると、 と同じlong4 バイトintです。試すlong long

于 2011-01-30T00:30:57.690 に答える