Java 按位 OR 出错



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 中的字节。

相关内容

最新更新