找到最低设置位

use*_*820 1 javascript bit-manipulation

我有5位数字

10000
01000
00100
Run Code Online (Sandbox Code Playgroud)

如果在我的计算中只有一位打开我没有问题.

但如果2位打开,那么我只想选择第一个位,例如

10010
Run Code Online (Sandbox Code Playgroud)

我想把它当作2而不是数字18

我可以在这种情况下使用任何按位操作吗?

har*_*old 7

由于您只想隔离它,而不是获取其索引,因此很容易:

function firstSetBit(number)
{
    return number & -number;
}
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为如果你取一个数字的二进制补码,首先你补充它,将最低设置位右边的所有零设置为1,将最低设置位设置为零,然后添加一个,设置位右边为零,最低设置位再次成为一个,结束进位链.因此,数字的否定具有相同的"正确部分",直到并包括最低设置位,但是最低设置位左侧的所有内容都是输入的补码.因此,如果取一个数字的按位与其否定,则取消最低设置位左侧的所有位.