我对从字节到整数的转换有点困惑。考虑以下代码:
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]
不是十进制的240,而是2的补码,-16。但是,它仍然应该是二进制的:0x11110000
那么,我为什么需要这样做data[1] & 0xFF
?
Java 在将所有内容传递给|
运算符之前是否将其转换为整数?那为什么会&0xFF
有所作为呢?