计算一个数字的二进制表示的数量

aks*_*xyz 12 java

可能重复:
计算32位整数中设置位数的最佳算法?

我想找出一个数字的二进制表示中有多少1个.我有2个逻辑.

  1.   int count =0;
    int no = 4;
    
    while(no!=0){
        int d = no%2;
        if(d==1)
            count++;
        no = no/2;
        str = str+ d;
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 现在第二个逻辑是用1,2,4,8,32迭代地继续屏蔽数字,并检查结果是否为1,2,4,8 ......我没有确定该循环应该结束的条件.

Pri*_*ley 31

使用Java API(java 5或更高版本).

Integer.bitCount(int);
Long.bitCount(long);
Run Code Online (Sandbox Code Playgroud)

注意:上面的java方法基于黑客的喜悦


nec*_*cer 16

比任何早期的答案更快:(与1位数而不是总位数成比例)

public class Foo {
  public static void main(String[] argv) throws Exception {
    int no = 12345;
    int count;
    for (count = 0; no > 0; ++count) {
      no &= no - 1;
    }
    System.out.println(count);
  }
}
Run Code Online (Sandbox Code Playgroud)


Phr*_*ogz 0

你的最终条件应该是跟踪你所在位的大小;如果它大于原始数字,则完成(从现在开始将只得到 0)。

哦,由于您没有指定语言,所以这里有一个 Ruby 解决方案:)

class Integer
  def count_binary_ones
    to_s(2).scan('1').length
  end
end

42.count_binary_ones #=> 3
Run Code Online (Sandbox Code Playgroud)