2016-02-12 20 views
5

は、誰かが私にどのようにC暗黙の変換?

printf("%d", -2<2u?1:-1); 

プリントを説明することができます '-1'。何らかの暗黙的な変換が行われていると仮定していますが、わかりません。

+7

すべての警告を有効にします。*「警告C4308:符号なしタイプに変換された負の整数定数」*が問題を説明しています。 –

+1

ここで、なぜこのコード 'if((-2 <2u-1u:-1)> 0){printf(" - 1> 0 "); } 'print '-1> 0' :) – Lundin

+0

@ Lundinあなたは[This](http://pastebin.com/raw/Ss7pW8hb)のようなものですか? – Michi

答えて

5

-2unsigned integerに変換されています。これはUINT_MAX - 1に等しくなりますが、これは確かに2より大きくなります。したがって、条件は失敗し、-1が印刷されます。

+0

「u」は-2と2の両方を「符号なし整数」に変換していますか? – Nebeski

+3

@Nebeskiいいえ、-2から 'unsigned int'への変換は、タイトルで言及されているように暗黙の変換です。符号付き量と符号なし量を直接比較することはできません。したがって、一方が他方に変換されます。 – unwind

+0

@Nebeski "整数昇格"と "通常の算術変換"を研究します。 – Lundin