美文网首页
二进制中1的个数

二进制中1的个数

作者: 我的天气很好啦 | 来源:发表于2018-10-07 21:16 被阅读0次

🍞环境:牛客的编译环境
🍰语言:JavaScript
☕️难点:如果自己去将整数变成二进制计算,在计算负数的时候,涉及到反码和补码的操作,这里比较复杂。
🍊题目:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
🌟解题思路:因为JS在数字底层是使用32位表示整数的。JS里有个toString方法,如果toString(2),则会把数字变成2进制的字符串返回。这个方法可以用来转换进制。这里有更好的方法,比如利用JS在数字底层的表示,可以通过位移与1作与运算来判断是否为1,如果为1,则count++。
🍇最优代码:

function NumberOf1(n)
{
    // write code here
    if (n===0) return 0;
    var count = 0;
    for (let i=0;i<32;i++){
        if (n & 1){  //右移并与1进行&运算
            count++;
        }
        n = n>>>1;
    }
    return count;
}

🍡有点耗性能的代码:

function NumberOf1(n)
{
    if (n===0) return 0;
    var count = 0;
    for (let i=0;i<32;i++){
        if ((n>>>i & 1) ===1){  //右移并与1进行&运算
            count++;
        }
    }
    return count;
}

消耗性能的原因是随着i增加,每次都会重复移动前n-1位,底层位移是一位一位移动的,所以这样很消耗性能。

相关文章

网友评论

      本文标题:二进制中1的个数

      本文链接:https://www.haomeiwen.com/subject/bkrraftx.html