如何使用按位将一个字节和 4 位从另一个字节转换为 short?

How to convert one byte and 4 bits from another byte to a short using bitwise?

按位使用,我们如何以最高效的方式将这 3 个字节转换为此模式中的两个短整型?:
(11111111)(01111110)(10000001) 3 个字节
(111111110111)(111010000001) 2 条短裤
找到了一种将两个字节组合成一个 short 的方法,但是对于 1 字节和 4 位的组合,尝试了数小时的各种方法都没有成功。感谢您的帮助。

byte byt1 = -1; // 11111111
byte byt2 = 126;// 01111110
byte byt3 = 129;// 10000001
short s_1_2 = (short) ((byt1 << 8) | (byt2 & 0xFF));
// value is 1111111101111110
short s1 = // want to be 111111110111
short s2 = // want to be 111010000001

其中一种可能是:

short s1 = (short) (((byt1 & 0xff) << 4) | ((byt2 & 0xf0) >> 4));
short s2 = (short) (((byt2 & 0x0f) << 8) | (byt3 & 0xff));