次のようなコードが与えられました。
unsigned int x = 0xDEADBEEF;
unsigned short y = 0xFFFF;
if (x > (signed short) y)
printf("Hello");
ただし、が signed short にキャストされたx > y
場合y
(そして、比較で unsigned int に暗黙的に変換された場合)、MAX_UINT の値を取るというのは正しくありません。なぜこれが起こるのですか?符号がy
拡張されていますか、それとも他に何がそのような奇妙な動作を引き起こすのでしょうか?