Finding trailing 0s in a binary number

前端 未结 7 918
渐次进展
渐次进展 2021-01-06 00:32

How to find number of trailing 0s in a binary number?Based on K&R bitcount example of finding 1s in a binary number i modified it a bit to find the trailing 0s.

7条回答
  •  灰色年华
    2021-01-06 01:08

    int countTrailZero(unsigned x) {
        if (x == 0) return DEFAULT_VALUE_YOU_NEED;
        return log2 (x & -x);  
    }
    

    Explanation:

    x & -x returns the number of right most bit set with 1.

    e.g. 6 -> "0000,0110", (6 & -6) -> "0000,0010"

    You can deduct this by two complement: x = "a1b", where b represents all trailing zeros. then

    -x = !(x) + 1 = !(a1b) + 1 = (!a)0(!b) + 1 = (!a)0(1...1) + 1 = (!a)1(0...0) = (!a)1b 
    

    so

    x & (-x) = (a1b) & (!a)1b = (0...0)1(0...0)

    you can get the number of trailing zeros just by doing log2.

提交回复
热议问题