在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时,符号出现。转换必须符号扩展字节值

在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时,符号出现。转换必须符号扩展
字节
值,因为
字节
在Java中是有符号类型。必须进行转换,因为逐位操作是对
int
值或
值的操作ues

有两种解决方案:

  • 在转换为
    int
    后,或在执行按位或后,屏蔽顶部位;例如

    x |= (lo & 0xff);
    x |= (hi & 0xff) << 8;
    
    x |=(lo&0xff);
    
    x |=(hi&0xff)
    byte lo=0x88;
    未编译,其值超出了由
    byte
    @AR.3表示的数字范围。我想知道如何避免该符号。您当前的代码未编译。您能否提供一个完整的工作示例?感谢您提供的有用答案。这解决了问题。