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)\), 下图:

image

更详细的证明我就直接手写了, 果然打字表达的不清楚啊..

image

我字好丑

posted @ 2021-06-28 17:23  dbg_8  阅读(856)  评论(0编辑  收藏  举报