“&”的奇怪用法对于新手C ++程序员

时间:2010-04-20 20:52:08

标签: c++

我这里有一些代码,并不真正理解“>>”和“&”。有人可以澄清吗?

buttons[0] = indata[byteindex]&1;
buttons[1] = (indata[byteindex]>>1)&1;
rawaxes[7] = (indata[byteindex]>>4)&0xf;

5 个答案:

答案 0 :(得分:16)

这些是按位运算符,这意味着它们对构成值的二进制位进行操作。有关详细信息,请参阅Bitwise operation on Wikipedia

<强>&安培;用于AND

如果indata[byteindex]是数字4,那么在二进制中它看起来像00000100.将此数字与1相加得到0,因为第1位未设置:

00000100 AND 00000001 = 0

如果值为5,那么你会得到这个:

00000101 AND 00000001 = 1

允许任何与掩码匹配的位。

<强>&GT;&GT;用于右移

右移将位向右移位!

00010000 >> 4 = 00000001

答案 1 :(得分:13)

答案 2 :(得分:5)

这些是按位运算符。 &安培;和两个论点一点一滴。 '&GT;&GT;'通过第二个参数将第一个参数的位串向右移位。 '&LT;&LT;'反其道而行之。 |按位或者^是按位xor就像&amp;是按位和。

答案 3 :(得分:3)

在英语中,第一行仅从Button [0]中获取最低位(位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数组。只是一个猜测。

答案 4 :(得分:2)

'&amp;' (在这种情况下)是按位AND运算符和“&gt;&gt;”是位移运算符(因此x>&gt; y产生x右移Y位)。

所以,他们采用indata[byteindex]的最低位并将其放入buttons[0]。他们将下一个最重要的位置放入buttons[1]

最后一个可能需要用二进制来看待,这很有意义。 0xf是1111 2 ,所以他们接受输入,将其右移4位,然后保留该结果的4个最低有效位。