首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >(x & 1)和(x >>= 1)是什么?

(x & 1)和(x >>= 1)是什么?
EN

Stack Overflow用户
提问于 2016-08-12 16:25:57
回答 5查看 180.9K关注 0票数 69

我试图执行赋值:“在不使用sizeof of ()函数的情况下,在无符号整数数据类型中查找位数。”

我的设计是将整数转换为位,然后计数它们。ex:10 is 10105 is 101

将整数转换为位表示显示了如下所示:

代码语言:javascript
复制
do
{ 
    Vec.push_back( x & 1 ) 
} 
while ( x >>= 1 );

我不想只复制粘贴的东西。当我使用F-10时,我看到了(x & 1)在做什么,但我不知道它是名字,也不知道它是如何工作的(比较什么?)我也知道>=哪个“大于或等于”,但是x >>= 1是什么?

注意:标记的副本是JavaScript而不是C++。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2016-08-12 16:27:48

这些是按位运算符(参考文献)。

x & 1产生的值要么是1,要么是0,这取决于x中最不重要的位:如果最后一个位是1,则x & 1的结果是1;否则,就是0。这是一个按位操作。

x >>= 1的意思是“将x设置为自身,向右移动一位”。表达式计算为移位后x的新值。

注意:对于无符号类型的值,移位后最重要位的值为零。对于有符号类型的值,最重要的位是在作为符号扩展的一部分转移之前从值的符号位中复制的,因此如果x是有符号类型,并且初始值为负值,循环将永远不会结束。

票数 74
EN

Stack Overflow用户

发布于 2018-03-07 03:36:35

x & 1等同于x % 2

x >> 1等价于x / 2

所以,这些东西基本上是除以二的结果和剩余的。

票数 53
EN

Stack Overflow用户

发布于 2018-02-23 14:10:40

除了“大百叶窗”的答案之外,我认为一个例子可能会有所帮助。为了更好的理解,我只使用8位。

x & 1产生的值要么是1,要么是0,这取决于x中最不重要的位:如果最后一个位是1,则x & 1的结果是1;否则,就是0。这是一个按位操作。

这是因为1将以位表示为00000001。只有最后一个位被设置为1。让我们假设x185,它将以bits表示为10111001。如果您在x上使用1按位和操作,这将得到如下结果:

代码语言:javascript
复制
00000001
10111001
--------
00000001

操作结果的前七位将是操作后的0,在本例中不携带任何信息(请参见逻辑与操作)。因为无论操作数x的前七位是什么,在操作之后,它们都是0。但是操作数1的最后一部分是1,它将显示操作数的最后一部分是0还是1。因此,在本例中,按位和操作的结果将是1,因为我们的最后一个x1。如果最后一位是0,那么结果也将是0,表示操作数x的最后一位是0

代码语言:javascript
复制
00000001
10111000
--------
00000000

x >>= 1的意思是“将x设置为自身,向右移动一位”。表达式计算为移位后x的新值。

让我们从上面挑一个例子。对于x >>= 1,这将是:

代码语言:javascript
复制
10111001
--------
01011100

对于左移位x <<= 1,它应该是:

代码语言:javascript
复制
10111001
--------
01110010

请注意用户在换班时的注意事项。

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

https://stackoverflow.com/questions/38922606

复制
相关文章

相似问题

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