lowbit運算
lowbit(n)定義爲非負整數n在二進制表示下“最低位的1及後面的所有0”構成的數值。比如二進制10011111010的lowbit就是最後兩位10。
那麼我們如何得到lowbit的值呢?
首先:取反。
~ 10011111010
= 01100000101
然後:+1
01100000101+1
= 01100000110
我們會發現,此時只有lowbit與原二進制相同,此時再與原數字相與即可得到lowbit(n)
綜上可得lowbit的運算公式
lowbit(n) = n & ( ~ n + 1 )
又在補碼中,~n+1= - n,所以
lowbit(n) = n & (- n)
那lowbit有什麼應用呢?我們可以求得一個數字二進制中所有1的個數,從而得到0的個數……
只需要不斷把n的值賦爲n-lowbit( n )即可~