我这里有一些代码,并不是真正理解">>“和"&”。有人能澄清一下吗?
buttons[0] = indata[byteindex]&1;
buttons[1] = (indata[byteindex]>>1)&1;
rawaxes[7] = (indata[byteindex]>>4)&0xf;发布于 2010-04-21 04:57:01
这些是按位运算符,这意味着它们对构成一个值的二进制位进行操作。有关更多详细信息,请参阅Bitwise operation on Wikipedia。
用于和的& is
如果indata[byteindex]是数字4,那么在二进制中它将看起来像00000100。由于位1未设置,因此将此数字与1进行ANDing会得到0:
00000100 AND 00000001 = 0但是,如果值是5,那么您将得到以下结果:
00000101 AND 00000001 = 1与掩码匹配的任何位都被允许通过。
>>用于右移
右移位将位向右移位!
00010000 >> 4 = 00000001发布于 2010-04-21 04:55:41
这些是按位运算符。对两个参数逐位进行& ands运算。“>>”将第一个参数的位串右移第二个参数。“<<”的作用正好相反。|是按位或,^是按位异或,就像&是按位与。
发布于 2010-04-21 05:04:43
在英语中,第一行只抓取到Button之外的最低位(0位)。基本上,如果值是奇数,它将是1,如果是偶数,它将是0。(比特1)第二个正在抓取第二个比特。如果该位已设置,则返回1,否则返回0。它也可以写成
buttons[1] = (indata[byteindex]&2)>>1;它也会做同样的事情。
最后(第3)行正在抓取第5位到第8位(第4-7位)。基本上,当它完成时,它将是一个从0到15的数字。它也可以被写成
rawaxes[7] = (indata[byteindex]&0xf0) >> 4;做了同样的事情。我还从上下文中猜测这些数组是无符号的char数组。不过,这只是个猜测。
https://stackoverflow.com/questions/2678521
复制相似问题