变量intVar是原始int,bb []是字节数组{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会导致负整数,并且由于java使用二进制补码,因此所有前导位将为1。与0xFF的和将使您拥有最低8位的字节和24个前导的字节0s。

07-26 03:03