二进制中 1 的个数

问题:

输入一个整数,输出该数二进制表示中 1 的个数。

JavaScript 代码:

/**
 * @param {number} n - a positive integer(这里也说了输入是正整数。。。)
 * @return {number}
 */
var hammingWeight = function(n) {
    let res = 0;
    let x = n.toString(2);
    x = x.split('');
    for(let i=0;i<x.length;i++){
        if(x[i]=='1'){
            res++;
        }
    }
    return res;
};

 这个代码有问题,当输入的整数为负数时,输出结果是错的。。

适用于正负整数的方法还是基于位运算:

首先把 n 与 1 做与运算,判断 n 的最低位是不是 1。然后,把 1 左移一位,再和 n 做与运算,就能判断 n 的次低位是不是 1 ......这样不断左移,就能判断 n 的其中一位是不是 1.

function NumberOf1(n)
{
    // write code here
    let count = 0;
    let flag = 1;
    while(flag){
        if(n&flag){
            count++;
        }
        flag=flag<<1;
    }
    return count;
}

 

posted @ 2019-06-17 14:29  湛蓝的家  阅读(158)  评论(0编辑  收藏  举报