方法一:逐位判断
判断 n最右一位是否为 1,根据结果计数。
将 n右移一位(本题要求把数字 n 看作无符号数,因此使用 无符号右移 操作)
/**
* @param {number} n - a positive integer
* @return {number}
*/
var hammingWeight = function(n) {
let mask = 1;
let count = 0;
for(let i = 0; i<32; i++) {
if((mask & n) != 0) {
count++;
}
n >>= 1;
}
return count;
};
方法二:巧用 n & (n - 1)
n&(n−1) 解析: 二进制数字 n 最右边的 1 变成 0 ,此 1 右边的 0 都变成 1 。
/**
* @param {number} n - a positive integer
* @return {number}
*/
var hammingWeight = function(n) {
let count = 0;
while(n!=0) {
count++;
n = n&(n-1);
}
return count;
};
(写了几次总是忘记,用的位操作符很不熟悉,需要反复练习)
关于按位操作符:https://www.jianshu.com/p/41fc061407ca