【发布时间】:2012-12-07 19:00:16
【问题描述】:
我对从字节到整数的转换有点困惑。考虑以下代码:
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 会有所作为呢?
【问题讨论】:
-
前段时间我做了一些代码的 C 到 Java 的移植,它使用了大量的按位运算,并想出了一个 helper class 让事情变得更容易一些。无法保证这些产品的质量或效率,但它们为我完成了这项工作。