以十进制数的二进制表示计数零

时间:2017-04-02 14:03:51

标签: java for-loop

这是我的代码:*已编辑

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)的零,但我可以弄清楚为什么这不起作用

2 个答案:

答案 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