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

标签 c++ bit-manipulation bitwise-operators bit-shift bitwise-and

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

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

Converting integer to a bit representation显示如下:

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

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

注意:标记的拷贝是 JavaScript 而不是 C++

最佳答案

这些是位运算符(reference)。

x & 1产生的值是 10 ,取决于 x 的最低有效位: 如果最后一位是 1x & 1 的结果是 1 ;否则为 0 .这是按位与运算。

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

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

关于c++ - 什么是 (x & 1) 和 (x >>= 1)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38922606/

相关文章:

c++ - 错误 : "Attempt to use a deleted function" when moving a promise

c++ - 如果自由函数不存在/不存在,SFINAE 从重载集中删除函数

c++ - 函数转发参数,什么都不做

android - 试图理解 Bitmap.Config.ARBG_8888

c++ - 按位运算符从 32 位获取字节

c++ - 查找数字是否为2的幂的时间复杂度

C++ bool 返回 0 1 而不是 true false

assembly - 在没有跳转的情况下在汇编中实现 eq, lt gt

C++: union 与按位运算符

c# - 如何在 C# 中将按位非运算符与移位运算符一起使用?