JZ15 二进制中1的个数

js中所有数值都以64位格式存储,但位操作会先将数值转化为32位,再进行位操作,之后再把结果转化为64位。 因此,本题中可以将整数n直接看成32位二进制数。

n = n & (n - 1)  //这里只要n中存在1,n与n-1相与就会把最低为的1抵消掉

完整代码:

function NumberOf1(n)
{
    
//     直接把n看成32位二进制数
    
    var num = 0;
    while(n){
        num++;
        n = n & (n - 1) 
    }
    return num
    // write code here
}
module.exports = {
    NumberOf1 : NumberOf1
};