在Java中执行按位或无符号扩展
在Java中,我有以下代码:在Java中执行按位或无符号扩展,java,unsigned,Java,Unsigned,在Java中,我有以下代码: byte lo = 0x88; byte hi = 0x0; short x = 0; x |= lo; x |= (short) ((short) hi << 8); // FIXME double cast ?? return x; 字节lo=0x88; 字节hi=0x0; 短x=0; x |=lo; x |=(短)((短)您好在执行逐位操作之前,当字节转换为int时,符号出现。转换必须符号扩展字节值
byte lo = 0x88;
byte hi = 0x0;
short x = 0;
x |= lo;
x |= (short) ((short) hi << 8); // FIXME double cast ??
return x;
字节lo=0x88;
字节hi=0x0;
短x=0;
x |=lo;
x |=(短)((短)您好在执行逐位操作之前,当字节转换为int时,符号出现。转换必须符号扩展字节
值,因为字节
在Java中是有符号类型。必须进行转换,因为逐位操作是对int
值或长
值的操作ues
有两种解决方案:
在转换为int
后,或在执行按位或后,屏蔽顶部位;例如
x |= (lo & 0xff);
x |= (hi & 0xff) << 8;
x |=(lo&0xff);
x |=(hi&0xff)byte lo=0x88;
未编译,其值超出了由byte
@AR.3表示的数字范围。我想知道如何避免该符号。您当前的代码未编译。您能否提供一个完整的工作示例?感谢您提供的有用答案。这解决了问题。