我正在尝试进行分配:“在不使用 sizeof() 函数的情况下查找无符号整数数据类型中的位数。”
我的设计是将整数转换为位,然后对它们进行计数。例如: 10 is 1010
和 5 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 许可协议
这些是 _按位运算符_( 参考)。
x & 1
produces a value that is either1
or0
, depending on the least significant bit ofx
: if the last bit is1
,x & 1
的结果是1
;否则,它是0
。这是一个按位与运算。x >>= 1
表示“将x
设置为自身向右移动一位”。该表达式在移位后计算为x
的新值。注意: 对于无符号类型的值,移位后最高有效位的值为零。对于有符号类型的值,作为 符号扩展 的一部分,在移位之前从值的符号位复制最高有效位,因此如果
x
是有符号类型,则循环将永远不会结束,并且初始值是负数。