27

我正在做一个编程项目,我需要做的一件事是编写一个函数,该函数返回一个掩码,该掩码标记最低有效 1 位的值。关于如何使用按位运算符确定值的任何想法?

ex: 
0000 0000 0000 0000 0000 0000 0110 0000 = 96
What can I do with the # 96 to turn it into:
0000 0000 0000 0000 0000 0000 0010 0000 = 32

我已经把头撞在墙上好几个小时试图弄清楚这一点,任何帮助将不胜感激!

4

3 回答 3

58
x &= -x; /* clears all but the lowest bit of x */
于 2013-09-14T21:32:29.043 回答
3

更易读的代码:

int leastSignificantBit(int number)
{
    int index = 0;

    while ((~number) & 1) {
        number >>= 1;
        index++;
    }
    return 1 << index;
}
于 2013-09-14T21:34:56.057 回答
2

为确保您获得正确的位/值:

  • 最低有效位位置=x & 1
  • 孤立的最低有效值1 =x & -x
  • 孤立的最低有效 1的从零开始的索引=log2(x & -x)

下面是它在 JavaScript 中的样子:

let x = 0b1101000;

console.log(x & 1);            // 0 (the farthest-right bit)
console.log(x & -x);           // 8 (the farthest-right 1 by itself)
console.log(Math.log2(x & -x); // 3 (the zero-based index of the farthest-right 1)
于 2020-11-29T23:33:53.067 回答