【问题标题】:How to find the number of 1's in a binary representation of a number?如何在数字的二进制表示中找到 1 的数量?
【发布时间】:2014-07-01 09:14:50
【问题描述】:

从其他搜索中,我发现这个问题被称为“汉明权重”或“人口计数”。有这么多统计数据给出了很多答案? 我需要以简单的方式找到解决方案吗?复杂性不是什么大问题。 JavaScript 中有没有像 Java 的 Integer.bitCount 这样的内置函数?

我目前正在执行以下操作。

var binary = 3;
var original = binary;
var count = 0;
while(binary>0)
{
    binary = binary >> 1 << 1;
    if(original-binary==1)
        count++;
    original = binary >> 1;
    binary = original;
}

有没有更好、更简单、更优雅的方法?

【问题讨论】:

  • 如果它真的是一个字符串,str.split('1').length,但那根本不是javascript,它是Java
  • @adeneo 对不起,错误的细节。我需要对一个号码执行此操作。
  • 然后是numb.toString().split('1').length,tada!
  • 以上方法时间复杂度高吗?我应该更喜欢哪个?

标签: javascript binary


【解决方案1】:

试试这个

var binary = 10;
var result = binary.toString(2); //Converts to binary
var count = result.split(1);//  count -1 is your answer
alert((result.split('1').length-1));

也可以写成

(binary.toString(2).split('1').length-1)

toString(2)  : helps to split it in a base2 format which is binary, can do this in a range of 2- 36 (iam not sure about the range) 

【讨论】:

  • 'result.split(2)' 在这里做什么?
  • 是split(1)还是split('1')?
【解决方案2】:

如果你想在二进制表示中计算 1 个数字,我们可以使用这样的正则表达式。

number.toString(2).match(/1/g).length

【讨论】:

    【解决方案3】:

    不使用内置函数的简单方法:

    function f(n){
        let i = 0;
        do if(n&1) ++i; while(n>>=1)
        return i;
    }
    
    // example:
    console.log(f(7)); // 3
    

    【讨论】:

      猜你喜欢
      • 2021-03-30
      • 2020-02-28
      • 2011-12-18
      • 2019-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-17
      • 1970-01-01
      相关资源
      最近更新 更多