短于int cast,奇怪的行为
Posted
技术标签:
【中文标题】短于int cast,奇怪的行为【英文标题】:short to int cast, weird behaviour 【发布时间】:2013-08-17 17:49:13 【问题描述】:我目前从 ByteBuffer 读取一个短值并将其应用于 int。
byte[] data = new byte0x90, 0xAF;
ByteBuffer b = ByteBuffer.wrap(data);
int value = b.getShort();
但 value
现在包含 0xFFFF90AF
而不是 0x90AF
。
我的解决方案是通过0xFFFF
对值进行位掩码:int value = b.getShort() & 0xFFFF;
我认为向上转换总是可能的,因为short
小于int
。有人能解释一下为什么会这样吗?
【问题讨论】:
附注:short
到 int
不是 upcast,因为 int
不是 short
的超类型。这称为扩大转化。
【参考方案1】:
short
已签名,并且在转换为 int
时会保留。 0x90AF 是负数short
,所以结果是负数int
。您的屏蔽解决方案是正确的。
【讨论】:
【参考方案2】:short
是有符号数量,但你很幸运:还有 char
,它是 Java 中唯一的 unsigned 原始类型,大小与 short
相同.尝试使用
int value = b.getChar();
char
是 Java 中成熟的数字类型,这是一个经常被忽视的事实。只是它的字符串表示暴露了它的特殊地位。
【讨论】:
以上是关于短于int cast,奇怪的行为的主要内容,如果未能解决你的问题,请参考以下文章