lowbit详解(其实没多少内容)
定义
对于一个数 x, 将其转化为二进制后的从右往左数的第一个 1 的位数即是 lowbit(x)
举几个个例子吧:
\((6)_{10} = (0000\,0110)_2\) , 那么 \(lowbit(6) = 2\)
\((9)_{10} = (0001\,0001)_2\) , 那么 \(lowbit(6) = 1\)
代码
inline int lowbit(int x) {
return x & (-x);
}
代码解释
还是先举例说明:
这里运用到了补码的知识.至于 原码, 反码, 补码 的具体解释, 可以看看这个blog, 我觉得这篇blog中讲的很详细.
6 的补码是 \(0000\,0110\), 而 -6 的补码是 \(1111\,1010\)
不难发现, \(6 \& (-6) = 3 = lowbit(6)\), 下图:
更详细的证明我就直接手写了, 果然打字表达的不清楚啊..
我字好丑
( ゚∀゚)o彡゜ ヒーコー ヒーコー!