int id = ((reply[0] & 0x3));
id = (id<<7) | (reply[1] & 0x7F);
假设我有一个存储2字节回复[0]和回复[1]的回复数组。 我想读取第一个字节中的最后两位和第二个字节中的所有位,然后将它们加在一起
为什么上面的代码会起作用,任何人都可以解释一下吗?
答案 0 :(得分:2)
此代码没有按照您的描述进行操作:它不是完整地取第二个字节,而是删除最后七位(& 0x7F
部分; 0x7F
是二进制01111111
),将它们连接到第一个数字的最后两位(<< 7
部分)。
答案 1 :(得分:1)
转换为二进制文件,您将得到答案。
3的二进制是11.如果你使用logical &
和11,你将只得到最后两位。这是你第一部分的答案。
对于第二部分,我认为它也不会按照你的意图行事。您可以使用logical AND
(进位)和logical XOR
添加单个位。
试着弄明白^ _ ^