这是我的代码:*已编辑
private static long zeros(long y){
int count= 0;
for(long i= y; i<=0; i/=2){
if((i%2)==0) {
count+=1;
}
return count;
}
当调用方法以二进制形式包含只有一个用于循环时,它必须计算所有给出十进制数(长y)的零,但我可以弄清楚为什么这不起作用
答案 0 :(得分:1)
你的循环
for(long i= y; i>=y; i/=2)
将在正y
s的第一次迭代之后完成,除非y
为零,在这种情况下循环是无限的。
您应该对您的计划进行一些修改:
y
在进入循环之前不是否定为y
为零时生成计数为1 i
达到零时停止循环。答案 1 :(得分:1)
为什么你根本不使用:
long l = 853;//You Long value
//Convert Long to Binary then count the number of 0
StringUtils.countMatches(Long.toBinaryString(l), "0");
示例:
System.out.println("toBinaryString = " + Long.toBinaryString(l));
System.out.println("Nbr = " + StringUtils.countMatches(Long.toBinaryString(l), "0"));
这将打印:
toBinaryString = 1101010101
Nbr = 4