我正在将byte
(8位)类型转换为short
(16位)类型,在我看来Java正在转换我的原始var的值而不是强制转换位。
我通过对结果var:short t = data & 0xFF
应用8位掩码来解决它。
Java是否会对var的值或其位进行强制转换?
答案 0 :(得分:8)
byte
,short
和int
都已签名(长,浮动和双倍)。这意味着当你有-128到127的字节时,它仍然是-128到127,简称为int,long,float或double。
如果要将范围-128到127映射到0到255,我建议您使用int
,这在Java中更容易使用。
byte b = -128;
int i = b & 0xFF; // i == 128
由于你有32位或64位寄存器,使用short
局部变量并没有像你想象的那样帮助你,除非你有很多(我的意思是数百万)BTW字节代码只允许两种大小的局部变量,一个槽(boolean,byte,short,float,int,reference)和两个槽(long和double)注意:引用甚至在64位JVM上使用一个“槽”。 / p>
唯一的无符号类型是char。
答案 1 :(得分:6)
Java转换该值。数据类型本身负责任何位表示;这个值假设 * 甚至不需要在引擎盖下有点模式。
*如果您构建的计算机不使用位
答案 2 :(得分:2)
Java将some primitive types视为有符号值,将值视为无符号,您需要屏蔽符号位