位運算技巧

消除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,計算總共消去了多少次即可。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容