以下
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
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 に答える