int to cast,奇怪的行为

reo*_*eox 2 java casting bytebuffer

我目前从ByteBuffer读取一个短值并将其应用于int.

byte[] data = new byte{0x90, 0xAF};
ByteBuffer b = ByteBuffer.wrap(data);
int value = b.getShort();
Run Code Online (Sandbox Code Playgroud)

但是value包含现在0xFFFF90AF而不是0x90AF.我的解决方案是通过0xFFFF以下方式将值掩盖:int value = b.getShort() & 0xFFFF;

我认为一个上流总是可能的,因为short小于int.有人能解释为什么它会像这样吗?

kih*_*eru 6

short已签名,并在转换为时保留int.0x90AF是负数short,因此结果为负数int.你掩盖它的解决方案是正确的.