1. 思路
1.1 方法一
对 n
每次执行 n % 2
的操作
1.2 方法二
使用位运算,老实说这个方法不知道的估计也想不出,知道也就知道了 😂
2. 代码(方法二)
➥ JavaScript
/**
* @param {number} n - a positive integer
* @return {number}
*/
var hammingWeight = function (n) {
let count = 0
while (n != 0) {
count += 1
n = n & (n - 1)
}
return count
};
3. 拓展
再说几个位运算的技巧,记住多少是多少吧。
x ^ 0 = x
x ^ 1s = ~x
x ^ (~x) = 1s
x ^ x = 0
x & 1 === 1 || x & 1 === 0
可以判断奇偶x & (x - 1)
清除最低位的 1 及后面的 0,就是本题的解法x & -x
得到最低位的 1x & (~0 << n)
将x
最右边的n
位清零(x >> n) & 1
获取x
第n
位的值(0 or 1)x | (1 << n)
将第n
位设为1
x & (~(1 << n))
将第n
位设为0
x & ((1 << n) - 1)
将x
最高位至第n
位(含)清零x & (~((1 << (n + 1)) - 1))
将第 0 位到第n
位(含)清零