Iva*_*ono 5 java bit-manipulation
我使用以下技巧来迭代 int 的位集:
while (b != 0)
{
c = b & (0 - b);
//Do something...
b = b ^ c;
}
Run Code Online (Sandbox Code Playgroud)
以数字 4128(二进制 0001000000100000)为例,这可以正常工作,因为 c 的值为 32 和 4096。
然而,我想要这些值的位置,而不是实际值,即 5 和 12。
是否有一行额外的代码可以插入到返回位置的循环中?
您可以使用Integer.numberOfTrailingZeros来获取位索引,如下所示:
while (b != 0)
{
c = b & (0 - b);
int index = Integer.numberOfTrailingZeros(c);
//Do something...
b = b ^ c;
}
Run Code Online (Sandbox Code Playgroud)