首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++程序员新手使用"&“的奇怪用法

C++程序员新手使用"&“的奇怪用法
EN

Stack Overflow用户
提问于 2010-04-21 04:52:08
回答 3查看 883关注 0票数 4

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

代码语言:javascript
复制
buttons[0] = indata[byteindex]&1;
buttons[1] = (indata[byteindex]>>1)&1;
rawaxes[7] = (indata[byteindex]>>4)&0xf;
EN

回答 3

Stack Overflow用户

发布于 2010-04-21 04:57:01

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

用于和的& is

如果indata[byteindex]是数字4,那么在二进制中它将看起来像00000100。由于位1未设置,因此将此数字与1进行ANDing会得到0:

代码语言:javascript
复制
00000100 AND 00000001 = 0

但是,如果值是5,那么您将得到以下结果:

代码语言:javascript
复制
00000101 AND 00000001 = 1

与掩码匹配的任何位都被允许通过。

>>用于右移

右移位将位向右移位!

代码语言:javascript
复制
00010000 >> 4 = 00000001
票数 16
EN

Stack Overflow用户

发布于 2010-04-21 04:55:41

这些是按位运算符。对两个参数逐位进行& ands运算。“>>”将第一个参数的位串右移第二个参数。“<<”的作用正好相反。|是按位或,^是按位异或,就像&是按位与。

票数 5
EN

Stack Overflow用户

发布于 2010-04-21 05:04:43

在英语中,第一行只抓取到Button之外的最低位(0位)。基本上,如果值是奇数,它将是1,如果是偶数,它将是0。(比特1)第二个正在抓取第二个比特。如果该位已设置,则返回1,否则返回0。它也可以写成

代码语言:javascript
复制
buttons[1] = (indata[byteindex]&2)>>1;

它也会做同样的事情。

最后(第3)行正在抓取第5位到第8位(第4-7位)。基本上,当它完成时,它将是一个从0到15的数字。它也可以被写成

代码语言:javascript
复制
rawaxes[7] = (indata[byteindex]&0xf0) >> 4;

做了同样的事情。我还从上下文中猜测这些数组是无符号的char数组。不过,这只是个猜测。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2678521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档