バイトから整数への変換に関して少し混乱しています。次のコードを検討してください。
byte[] data = new byte[] { 0, (byte) 0xF0 };
int masked = data[0] << 8 & 0xFF | data[1] & 0xFF; //240
int notMasked = data[0] << 8 | data[1]; //-16
Java のバイトは符号付きでdata[1]
あるため、10 進数の 240 ではなく、2 の補数である -16 です。ただし、それでもバイナリで0x11110000
ある必要がありますdata[1] & 0xFF
。
Javaは、演算子に渡す前にすべてを整数に変換してい|
ますか? なぜ&0xFF
違いを生むのですか?