前言
745 …
lowbit操作
对于 l o w b i t lowbit lowbit的定义为"非负整数 n n n在二进制表示下最低位的1及其后面所有的0"所构成的数值,例如:当 n = 12 n=12 n=12时, 12 = ( 1100 ) 2 12=(1100)_2 12=(1100)2,所以 l o w b i t ( 12 ) = ( 100 ) 2 = 4 lowbit(12)=(100)_2=4 lowbit(12)=(100)2=4
那么如何实现 l o w b i t lowbit lowbit操作呢?
先将n取反,此时第k为变为1,第0~k-1位变为1,再令n=n+1,此时第k为1,0 ~ k-1为0。
进行完上面的操作后,n的第 k + 1 k+1 k+1位恰好与原来相反所以 n & ( n + 1 ) n\&(~n+1) n&( n+1)仅有第k位为1。
因此: l o w b i t ( n ) = n & ( n + 1 ) = n & ( − n ) lowbit(n)=n\ \&(~n+1)=n\ \&(-n) lowbit(n)=n &( n+1)=n &(−n)
听完概念,来举个例子:
对于整数12,它的二进制表示为 12 = ( 1100 ) 2 12=(1100)_2 12=(1100)2,将它取反变为 ( 0011 ) 2 (0011)_2 (0011)2,加1变为 ( 0100 ) 2 (0100)_2 (0100)2,可以观察到此时的二进制数为