lowbit(n)函数取出n在二进制表示下最低位的1以及它后面的0构成的数值
lowbit(x)=n&(~n+1)
原理:
假设x最低位的1在第k位上
则 ~ n的二进制的第k位为0, 0~k-1位全部为1,k+1 ~ inf位也被取反
于是~ n + 1 由于进位,0~k-1位全部为0,第k位为1,k+1 ~ inf位仍然和原来相反
于是n&(~ n + 1)自然就只剩下最低位的1以及它后面的0构成的数值了
由于补码下:~ n=-1-n
于是
lowbit(x)=x&(-x)