之前没接触过java位运算.
字节数组转换为 short
private static short bytesToShort(byte[] bs)
{
return (short)(bs[1] << 8 | (bs[0] & 0xff)); //为什么低位必须 & 0xff
}我的理解:bs[1] << 8(高位左移8位),然后与低位(bs[0])直接进行 | (或运算) 不就行了吗?
当然我的理解在测试下证明是错误的,为什么非要在低位先进行 & 0xff ?。
字节数组转换为 short
private static short bytesToShort(byte[] bs)
{
return (short)(bs[1] << 8 | (bs[0] & 0xff)); //为什么低位必须 & 0xff
}我的理解:bs[1] << 8(高位左移8位),然后与低位(bs[0])直接进行 | (或运算) 不就行了吗?
当然我的理解在测试下证明是错误的,为什么非要在低位先进行 & 0xff ?。
byte、short在做移位运算之前,会被自动转换为int类型
byte、short经过移位运算后结果都为int型。
{
return (short)(bs[1] << 8 & 0xff00 | (bs[0] & 0xff));
}但我测试发现:高8位倒没必要 & 0xff00,结果也一样,这又为什么?
假设bs[1]是11001011
先转换成int:11111111 11111111 11111111 11001011
左移8位 :11111111 11111111 11001011 00000000结果一样是因为强转为short了,你先把强转去掉,让返回值为int
强转为short:11001011 00000000