2

次のようなコードが与えられました。

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拡張されていますか、それとも他に何がそのような奇妙な動作を引き起こすのでしょうか?

4

1 に答える 1

4

符号付き型の正の値に収まらない値の符号なしから符号付きへの変換は実装定義です。ここで、特定のコンパイラの場合、おそらく であることが判明し-1、その後 unsigned is に変換されUINT_MAXます。

于 2013-03-05T16:54:51.387 に答える