编程语言
首页 > 编程语言> > Java移位字节返回意外结果

Java移位字节返回意外结果

作者:互联网

我试图将2个字节转换为短消息.这2个字节表示无符号短路,而后者又代表端口.我已经尝试了多种方法将这些字节转换为简短的java.但是,我经常无法正确地做到这一点.

这些是我尝试过的方法:

byte a = 0x17;
byte b = 0xCC;

(short)((a << 8) | b);
(short)(((short)a << 8) | b);

结果是0xFFCC,但应该是0x17CC.

解决方法:

在Java中经历算术运算的任何值,首先被转换为可以覆盖两个操作数的更高类型.如果它们仍然较小,则两个操作数都被转换为int.

结果,b首先被转换为int并变为0xFFFFFFCC.对于向左移动8位的任何内容,或者将其保持为掩码0xFFFFFF00,因此对结果没有影响.将它转换为short只会缩小左边的16位.

要解决它,在执行操作之前使用0xFF显式屏蔽:

(short)(((a&0xFF)<<8)|(b&0xFF))

标签:java,byte,short,byte-shifting
来源: https://codeday.me/bug/20190608/1200549.html