我有一个大小为4096的字节数组。我用0xA2填充字段0,用0xF0填充字段1。

我的目标是将字段0向左移动8位,然后对字段1进行“或”运算并将其存储到short变量中。

纸上结果应为:

     1010 0010 (0xA2)
>>shift left by 8 bits
1010 0010 0000 (0xA20)

>>OR-operation with field 1
1010 0010 0000 (0xA20)(field 0)
     1111 0000 (0xF0)(field 1)
----------------------
1010 1111 0010 (0xAF2)


已经有a similar post了,但是它只是有所帮助。
即使我正在投射,它似乎也切断了移位的位。
这是代码。

public static void main(String[] args) {
        byte[] myMem = new byte[4096];
        myMem[0] = (byte)0xA2;
        myMem[1] = (byte)0xF0;

        short test = (short)(myMem[0] << 8 | myMem[1]);
    }


调试器显示以下值:

myMem[0] = -94 (which is correctly 0xA2)
myMem[1] = -16 (which is correctly 0xF0)
test = -16 (which is wrong, 0x00A2. Should be -23824 or 0xA2F0).


我想在某个地方我犯了一个逻辑错误,但是却找不到。

最佳答案

采用

    short test = (short)((myMem[0]  << 8) | ((myMem[1])& 0xff));

09-30 14:58