0

以下
2147483647U > -2147483647 - 1では、unsigned への変換/昇格のために false と評価されます。
私の質問は、それがどのように促進されるかということです。
減算演算が最初に実行され、結果が符号なしに昇格されるか、それとも各オペランドが代わりに符号なしに昇格されますか?
符号付きの場合は 4 ビット [-8,7]、符号なしの場合は [0,15] の例:
7U > -7 -1
これは (unsigned)(-7) + (unsigned)(-1) = (9U) + (15U) = 24U になります
7U > 24Uどちらが偽かということになります。
それとも、偽の
-7-1 = -8 = 8U
Soがありますか7U > 8U

4

1 に答える 1

2

この表現

2147483647U > -2147483647 - 1

には 2 つの演算子があり、マイナスは論理 > より優先度が高くなります。

したがって、最初に計算された部分式があります

-2147483647 - 1

どちらのオペランドも int 型です。それは彼らの一般的なタイプです。したがって、どちらのプロモーションも行われません。あなたは得るでしょう

-2147483648

次に表現

2147483647U > -2147483648

評価されます。

ここで、一般的な型は unsigned int です。Signed と unsigned int は同じランクですが、そのような場合、一般的な型は unsigned int です。

この式では、右側のオペランドの内部表現は、単純に unsjgned 値として解釈されます。したがって、左オペランドより大きい場合、結果は false になります。

この例を考えると

7U > -7 -1

その-7 - 1場合は -8 に等しくなります。-8 の内部表現は

1000

unsigned int としては 8 に等しい。

7u > 8u

偽に等しいです。

于 2014-09-23T18:14:20.907 に答える