6

我有这行代码

int b1 = 0xffff & (content[12]<<8 | 0xff & content[11]);

我有一个小端字节数组(内容 []),需要重新创建一个 2 字节值。这段代码可以很好地完成工作,但在测试之前我已经这样写了

int b1 = 0xffff & (content[12]<<8 | content[11]);

结果不对。我的问题是为什么在这种情况下需要 0xff ?

4

1 回答 1

12

0xff是必要的,因为有两个因素的汇合:

  1. Java 中的所有整数类型都是有符号的
  2. 所有位运算符在执行之前将其参数提升为int(或long,如果需要)。

结果是,如果 的高位content[11]被设置,它将被符号扩展为负值int。然后,您需要将&0xff返回为(正)字节值。否则,当您|使用 的结果时content[12]<<8,高位字节将全为 1。

于 2013-04-04T18:26:11.267 回答