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 は 2 の補数を使用するため、先頭のすべてのビットが 1 になります。0xFF を使用すると、最下位 8 ビットと先頭の 24 のバイトが得られます。 0秒。

于 2012-12-19T08:13:04.477 に答える