本文已参与「新人创作礼」活动,一起开启掘金创作之路。
lowbit
定义:lowbit(n)定义非负整数n在二进制表示下“最后一个1及其后面所有的0”。
例如:10=(1010)2,则lowbit(10)=(10)2=2
原理:
假设n的第k位是1,第0 ~ k−1位都是0。
先把n取反,则变成第k位是0,第0 ~ k−1位都是1。
再+1,因为进位,后面的1都变成0,第k位变成1,前面不变。
与之前的n做与运算,就只剩下第k位是1了,即为lowbit(n)。
所以lowbit(n)=n&(∼n+1)。
又因为补码表示下∼n=−1−n ,所以lowbit(n)=n&−n
所以实现起来特别简单而又高效:
int lowbit(int n)
{
return n & -n;
}
同步发文于CSDN,原创不易,转载请附上原文链接哦~
Tisfy:letmefly.blog.csdn.net/article/det…