可能重复:
计算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;
}
Run Code Online (Sandbox Code Playgroud)现在第二个逻辑是用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)
你的最终条件应该是跟踪你所在位的大小;如果它大于原始数字,则完成(从现在开始将只得到 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)