消除x最后一位1:x & (x - 1)
Go代碼:
var x int = 97 //97的二進(jìn)制:1100001
fmt.Println(x & (x - 1)) //輸出:96,二進(jìn)制:1100000
一跺撼、用O(1) 時(shí)間檢測(cè)整數(shù) n 是否是 2 的冪次敛摘。
分析:如果N是2的冪次,則N要滿足以下條件:
1习贫、N>0
2逛球、N的二進(jìn)制中,只有一個(gè)1
二苫昌、計(jì)算在一個(gè) 32 位的整數(shù)的二進(jìn)制表式中有多少個(gè) 1颤绕。
由于x & (x-1)消去x最后一位1,不斷使用x & (x-1)消去x最后一位1祟身,計(jì)算總共消去了多少次即可奥务。