short i = -123;
unsigned j = (unsigned)i;
printf("%08x\n", j);
とすると、ffffff85 と表示されました。
unsignedでキャストしているから、0000ff85と表示されると思ったのですが、
なぜ符号が拡張されてしまうのでしょうか?