Java编译如何工作?

jbd*_*zan 1 java casting

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

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

Java是否会对var或其位的值进行投射?

Pet*_*rey 8

byte,short并且int都签名(如长,浮动和双倍).这意味着当你有一个-128到127的字节时,它总是-128到127,简称为int,long,float或double.

如果要将范围-128到127映射到0到25​​5,我建议您使用int更容易在Java中使用的范围.

 byte b = -128;
 int i = b & 0xFF; // i == 128
Run Code Online (Sandbox Code Playgroud)

由于你有32位或64位寄存器,使用short局部变量并不像你想象的那样帮助你,除非你有很多(我的意思是数百万)BTW字节代码只允许两种大小的局部变量,一个槽(布尔,字节,短,浮点,整数,引用)和两个槽(长和双)注:即使在64位JVM上,引用也使用一个"槽".

唯一的无符号类型是char.


Emi*_*röm 6

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

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