如何从两个字节中删除?0x7 + 0x86 = 0x1c000

And*_*eas 0 java byte casting

我正在尝试将表示无符号整数的两个字节转换为Long.字节在buffer其中是字节数组.

// buffer[0] = 0x7 and buffer[1] = 0x86
long myLong = ( buffer[0] & 0xFF ) << 8 + ( buffer[1] & 0xFF );
Log.i("TAG",String.format("%d", myLong ); // outputs "114688" (0x1c000)
Log.i("TAG",String.format("%d + %d",
    (0xFF&buffer[0])<<8, (0xFF&buffer[1]) )); // outputs "1792 + 134"
Run Code Online (Sandbox Code Playgroud)

我将高位字节进行位移,然后将两个字节加在一起.但是添加有一些问题.我希望第一个日志输出给出1926,但这没有发生.为什么?

kih*_*eru 5

运营商优先级存在问题.+以前评估过<<.(通常|用于组合).

long myLong = ((buffer[0] & 0xFF) << 8) | (buffer[1] & 0xFF)
Run Code Online (Sandbox Code Playgroud)