1

我正在将byte(8 位)类型转换为short(16 位)类型,在我看来,Java 正在转换我的原始 var 的值而不是转换位。

我通过对生成的 var: 应用 8 位掩码来解决它short t = data & 0xFF

Java 是根据 var 的值还是在它的位上进行转换?

4

3 回答 3

8

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。

于 2013-04-16T07:19:27.497 回答
6

Java 转换该值。数据类型本身负责任何位表示;该值确实假设*甚至不需要是引擎盖下的位模式。

* 如果您构建一台不使用位的计算机

于 2013-04-16T07:16:55.107 回答
2

Java将一些原始类型视为有符号值,要将值视为无符号,您需要屏蔽符号位

于 2013-04-16T07:18:04.930 回答