lowbit原理浅解
Posted Tisfy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lowbit原理浅解相关的知识,希望对你有一定的参考价值。
lowbit
定义: l o w b i t ( n ) lowbit(n) lowbit(n)定义非负整数 n n n在二进制表示下“最后一个 1 1 1及其后面所有的 0 0 0”。
例如: 10 = ( 1010 ) 2 10=(1010)_2 10=(1010)2,则 l o w b i t ( 10 ) = ( 10 ) 2 = 2 lowbit(10)=(10)_2=2 lowbit(10)=(10)2=2
原理:
假设
n
n
n的第
k
k
k位是
1
1
1,第
0
0
0 ~
k
−
1
k-1
k−1位都是
0
0
0。
先把 n n n取反,则变成第 k k k位是 0 0 0,第 0 0 0 ~ k − 1 k-1 k−1位都是 1 1 1。
再 + 1 +1 +1,因为进位,后面的 1 1 1都变成 0 0 0,第 k k k位变成 1 1 1,前面不变。
与之前的 n n n做与运算,就只剩下第 k k k位是 1 1 1了,即为 l o w b i t ( n ) lowbit(n) lowbit(n)。
所以 l o w b i t ( n ) = n & ( ∼ n + 1 ) lowbit(n)=n\\&(\\sim n+1) lowbit(n)=n&(∼n+1)。
又因为补码表示下 ∼ n = − 1 − n \\sim n = -1-n ∼n=−1−n ,所以 l o w b i t ( n ) = n & − n lowbit(n)=n\\&-n lowbit(n)=n&−n
所以实现起来特别简单而又高效:
int lowbit(int n)
{
return n & -n;
}
原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/119251807
以上是关于lowbit原理浅解的主要内容,如果未能解决你的问题,请参考以下文章