編寫一個函數,輸入是一個無符號整數,返回其二進制表達式中數字位數爲 ‘1’ 的個數(也被稱爲漢明重量)。函數
示例 1:spa
輸入:00000000000000000000000000001011
輸出:3
解釋:輸入的二進制串 00000000000000000000000000001011 中,共有三位爲 '1'。
複製代碼
示例 2:code
輸入:00000000000000000000000010000000
輸出:1
解釋:輸入的二進制串 00000000000000000000000010000000 中,共有一位爲 '1'。
複製代碼
示例 3:string
輸入:11111111111111111111111111111101
輸出:31
解釋:輸入的二進制串 11111111111111111111111111111101 中,共有 31 位爲 '1'。
複製代碼
解答這道題目,咱們須要知道,按位與的取值規則,1 & 1 等於 1; 1 & 0 等於 0;0 & 1 等於0;0 & 0等於0。it
舉一個例子🌰io
// 結果等於1
0b11111111111111111111111111111101 &
0b00000000000000000000000000000001
複製代碼
一個數,與1進行按位與操做。若是結果等於1,說明操做數的第一位等於1。這時,咱們計數器自增一。function
而後咱們將操做數右移一位,而後再與1進行按位與操做,判斷結果是否等於1。class
// 0b11111111111111111111111111111101 無符號右移一位
0b01111111111111111111111111111110
// 結果等於0
0b01111111111111111111111111111110 &
0b00000000000000000000000000000001
複製代碼
……………………,依次類推,就可知,二進制中有多個1了。二進制
/** * @param {number} n - a positive integer * @return {number} */
var hammingWeight = function(n) {
let num = 0
while (n) {
if (n & 1 === 1) {
num += 1
}
n = n >>> 1
}
return num
};
複製代碼