我有这行代码爪哇位运算
int b1 = 0xffff & (content[12]<<8 | 0xff & content[11]);
我在小端排序的ByteArray(内容[])和需要重新创建一个2字节值。此代码工作得很好,但在测试之前我曾经有过这样写
int b1 = 0xffff & (content[12]<<8 | content[11]);
,结果是不正确的。我的问题是为什么在这种情况下需要0xff?
我有这行代码爪哇位运算
int b1 = 0xffff & (content[12]<<8 | 0xff & content[11]);
我在小端排序的ByteArray(内容[])和需要重新创建一个2字节值。此代码工作得很好,但在测试之前我曾经有过这样写
int b1 = 0xffff & (content[12]<<8 | content[11]);
,结果是不正确的。我的问题是为什么在这种情况下需要0xff?
的0xff
是必要的,因为两个因素的汇合:
int
(或long
,如果需要的话)。其结果是,如果content[11]
高阶位被设置,它将被符号扩展到负int
值。您需要&
这与0xff
返回到(正)字节值。否则当你|
它的结果为content[12]<<8
时,高位字节将全部为1。
Thx回复!我不会猜测内容[11]会被转换为高位设置的int。我认为当我将两个值与OR结合时,他们会在比特级别上使用。干杯 – John 2013-04-04 18:34:03
@John如果你对这个答案感到满意(你似乎是这样),请[接受它](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-工作)。 – 2013-04-05 16:30:55
因为字节被解释为带符号整数,这意味着,例如,(字节)0x80得到(int)0xffffff80。这称为符号扩展。 – Ingo 2013-04-04 18:26:33