消除x最后一位1:x & (x - 1)
Go代碼:
var x int = 97 //97的二進制:1100001
fmt.Println(x & (x - 1)) //輸出:96,二進制:1100000
一、用O(1) 時間檢測整數 n 是否是 2 的冪次。
分析:如果N是2的冪次,則N要滿足以下條件:
1、N>0
2、N的二進制中,只有一個1
二、計算在一個 32 位的整數的二進制表式中有多少個 1。
由于x & (x-1)消去x最后一位1,不斷使用x & (x-1)消去x最后一位1,計算總共消去了多少次即可。