0)` 一部の C 実装では True と評価されますか? " />
C で (-2147483648 > 0) が True を返すのはなぜですか?
C では、 -2147483648 は正のリテラル値 (2147483648) として解釈されます。ただし、正のリテラルの場合は、単項マイナス演算子を使用します。プラットフォーム上の int 範囲をオーバーフローすると、コンパイラの動作は未定義になります。
実際には、未定義の動作により、実装によっては値が負の数として表現され、単項マイナスを適用すると正になる場合があります。他のものはそれを表現するために符号なし型を使用するかもしれません。
この曖昧さを避けるために、通常は INT_MIN のような定数が定義されます。
#define INT_MIN (-2147483647 - 1)
の代わりに
#define INT_MIN -2147483648
これにより、INT_MIN が意図した正しい負の値を表すことが保証されます。
のように、式が int にキャストされる場合>if (int(-2147483648) > 0)
コンパイラは式を int の領域の負の数として評価し、結果は false になりますOutput.
未定義の動作はコンパイラとプラットフォームによって異なることに注意することが重要です。予測可能な結果を確保するには、明示的に定義された定数を使用し、実装固有の動作につながる可能性のある境界値を避けることを常にお勧めします。
以上が一部の C 実装で `(-2147483648 > 0)` が True と評価されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。