我正在将byte
(8 位)类型转换为short
(16 位)类型,在我看来,Java 正在转换我的原始 var 的值而不是转换位。
我通过对生成的 var: 应用 8 位掩码来解决它short t = data & 0xFF
。
Java 是根据 var 的值还是在它的位上进行转换?
byte
,short
并且int
都是有符号的(就像 long、float 和 double 一样)。这意味着当您有一个 -128 到 127 的字节时,它在 short、int、long、float 或 double 中保持为 -128 到 127。
如果您想映射范围 -128 到 127 到 0 到 255,我建议您使用int
在 Java 中更容易使用的 an。
byte b = -128;
int i = b & 0xFF; // i == 128
由于您有 32 位或 64 位寄存器,因此使用short
局部变量并不能像您想象的那样帮助您,除非您有很多(我的意思是数百万)顺便说一句,字节码只允许两种大小局部变量,一个槽(boolean、byte、short、float、int、reference)和两个槽(long 和 double) 注意:即使在 64 位 JVM 上,引用也使用一个“槽”。
唯一的无符号类型是 char。
Java 转换该值。数据类型本身负责任何位表示;该值确实假设*甚至不需要是引擎盖下的位模式。
* 如果您构建一台不使用位的计算机
Java将一些原始类型视为有符号值,要将值视为无符号,您需要屏蔽符号位