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

新手上路,请多包涵

我正在尝试进行分配:“在不使用 sizeof() 函数的情况下查找无符号整数数据类型中的位数。”

我的设计是将整数转换为位,然后对它们进行计数。例如: 10 is 10105 is 101

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

 do
{
    Vec.push_back( x & 1 )
}
while ( x >>= 1 );

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

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

原文由 Sandra K 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 869
2 个回答

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

x & 1 produces a value that is either 1 or 0 , depending on the least significant bit of x : if the last bit is 1x & 1 的结果是 1 ;否则,它是 0 。这是一个按位与运算。

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

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

原文由 Sergey Kalinichenko 发布,翻译遵循 CC BY-SA 3.0 许可协议

x & 1 等价于 x % 2

x >> 1 相当于 x / 2

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

原文由 rama 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题