找到最低设置位

时间:2012-09-03 11:44:02

标签: javascript bit-manipulation

我有5位数字,如

10000
01000
00100

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

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

10010

我想将其视为2而不是数字18

有没有可以在这种情况下使用的按位操作?

4 个答案:

答案 0 :(得分:5)

由于你只想隔离它,而不是得到它的索引,所以很容易:

function firstSetBit(number)
{
    return number & -number;
}

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

答案 1 :(得分:0)

二元运算符通常会影响数字的所有位。因此,没有特殊功能只能获得第一个“1”。但你可以尝试这样一个功能:

function filterFirstFoundBit(number)
{
    for (var i = 0; i < 32; i++) {
        if ((1 << i) & number)
        {
            return 1 << i;
        }
    }
    return number;
}
document.write(filterFirstFoundBit(9)); //10010​​​​​​​​

试试here

答案 2 :(得分:0)

function isolateLowestBit(input)
{
  mask = 1;
  while (mask <= input)
  {
    if (mask & input)
    {
      // found match - mask is set to the value of the lowest bit
      return mask;
    }

    mask *= 2;  // shift up mask by one bit
  }

  // no match
  return 0;
}

请注意Javascript中的按位操作是一个坏主意,因为Javascript数字不是自然整数。

答案 3 :(得分:0)

返回log2(n&-n)+1;

这可能会对您有所帮助。