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
我可以在这种情况下使用任何按位操作吗?
由于您只想隔离它,而不是获取其索引,因此很容易:
function firstSetBit(number)
{
return number & -number;
}
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为如果你取一个数字的二进制补码,首先你补充它,将最低设置位右边的所有零设置为1,将最低设置位设置为零,然后添加一个,设置位右边为零,最低设置位再次成为一个,结束进位链.因此,数字的否定具有相同的"正确部分",直到并包括最低设置位,但是最低设置位左侧的所有内容都是输入的补码.因此,如果取一个数字的按位与其否定,则取消最低设置位左侧的所有位.