intとshortを追加すると、結果はint、つまり4バイトになります。
しかし、それをshortにキャストすると、intの最後の2バイトからshortになります。
123456
のバイトは0x0 0x1 0xe2 0x40
であるため、から短くしてい0xe2 0x40
ます。
1である最初のビットは0xe2
、結果のショートが負になります。
この短いプログラムで遊んで、何が起こるかを確認できます。
int i = 123456; // <== change the value
System.out.format("Bytes of %d: ", i);
byte[] bytes = ByteBuffer.allocate(4).putInt(i).array();
for (byte b : bytes) {
System.out.format("0x%x ", b);
}
System.out.format("\nlast two bytes : %d*256 + %d = %d\n", bytes[2], bytes[3], (short)(bytes[2]*256 + bytes[3]));
出力:
Bytes of 123456: 0x0 0x1 0xe2 0x40
Last two bytes : -30*256 + 64 = -7616