Variable intVar is primitive int, bb[] is byte array {0x02,0xF7,0x8B,0xF9};
intVar = bb[0];
//intVar = 00000002
intVar <<= 8;
//intVar = 00000200
intVar |= bb[1];
//intvar = fffffff7
为什么????
原因是符号扩展。用:
intVar = 0xFF & bb[0];
//intVar = 00000002
intVar <<= 8;
//intVar = 00000200
intVar |= 0xFF & bb[1];
// intVar = 000002F7
使用负字节(java 字节有符号)作为 int 会导致负 int,并且由于 java 使用 2 的补码,所有前导位都将为 1。加上0xFF,您将获得最低 8 位和 24 个前导 0 中的字节。