如何获得数字中最低位的位置?

时间:2013-09-14 21:17:57

标签: c bit-manipulation

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

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

我一直把头靠在墙上几个小时试图解决这个问题,我们将非常感谢任何帮助!

3 个答案:

答案 0 :(得分:46)

x &= -x; /* clears all but the lowest bit of x */

答案 1 :(得分:2)

更易读的代码:

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

    while ((~number) & 1) {
        number >>= 1;
        index++;
    }
    return 1 << index;
}

答案 2 :(得分:0)

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

  • 最低有效位 = 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)