0

变量intVar是原始 int,bb[]是字节数组 {0x02,0xF7,0x8B,0xF9};

  intVar = bb[0];
  //intVar = 00000002    
  intVar <<= 8;
  //intVar = 00000200
  intVar |= bb[1];
  //intvar = fffffff7

为什么????

4

1 回答 1

3

原因是符号扩展。采用:

  intVar = 0xFF & bb[0];
  //intVar = 00000002    
  intVar <<= 8;
  //intVar = 00000200
  intVar |= 0xFF & bb[1];
  // intVar = 000002F7

使用负字节(Java 字节已签名)作为 int 会导致负 int,并且由于 java 使用二进制补码,所有前导位将为 1。加上 0xFF 将为您提供最低 8 位和前 24 位的字节0 秒。

于 2012-12-19T08:13:04.477 回答