计算一个数字的二进制表示的个数
可能重复:
计算32位整数中设定位数的最佳算法?
我想知道在一个数字的二进制表示中有多少个1。我有2个逻辑。
int count =0;
int no = 4;
while(no!=0){
int d = no%2;
if(d==1)
count++;
no = no/2;
str = str+ d;
}
现在第二个逻辑是继续用1,2,4,8,32迭代屏蔽数字,并检查结果是否为1,2,4,8 .....我不知道该循环的结束条件是什么。
使用Java API(Java 5或更高版本)。
Integer.bitCount(int);
Long.bitCount(long);
注意:上面的java方法基于黑客的喜悦
比以前的答案更快:(与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);
}
}
看起来像c / c ++ / c#,如果是这样,你有移位..只是从0循环到N-1位并使用sum+=(value>>i)&1
即:你总是检查最后一个/最右边的位,但是将每个迭代的数字的二进制表示向右移动,直到你没有更多位需要检查。
另外,考虑有符号/无符号和任何整数格式。 但是你没有说明这个问题应该如何处理。
链接地址: http://www.djcxy.com/p/72579.html上一篇: counting number of ones in binary representation of a number
下一篇: How to count the number of 1's a number will have in binary?