读取2字节内的位

时间:2012-04-02 16:28:37

标签: java

int id = ((reply[0] & 0x3));
id = (id<<7) | (reply[1] & 0x7F);

假设我有一个存储2字节回复[0]和回复[1]的回复数组。 我想读取第一个字节中的最后两位和第二个字节中的所有位,然后将它们加在一起

为什么上面的代码会起作用,任何人都可以解释一下吗?

2 个答案:

答案 0 :(得分:2)

此代码没有按照您的描述进行操作:它不是完整地取第二个字节,而是删除最后七位(& 0x7F部分; 0x7F是二进制01111111 ),将它们连接到第一个数字的最后两位(<< 7部分)。

答案 1 :(得分:1)

转换为二进制文件,您将得到答案。 3的二进制是11.如果你使用logical &和11,你将只得到最后两位。这是你第一部分的答案。

对于第二部分,我认为它也不会按照你的意图行事。您可以使用logical AND(进位)和logical XOR添加单个位。

试着弄明白^ _ ^