获取整数中设置位的位置

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。

是否有一行额外的代码可以插入到返回位置的循环中?

har*_*old 4

您可以使用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)