查找保存int数所需的位数

问题描述 投票:1回答:1

所以我的问题是我必须递归地找到显示/保存数字所需的位数,例如4(10)= 100(2),因此需要3位。我想我已经知道应该怎么做,但是我的代码仍然无法正常工作。这是我到目前为止的内容:

public static int l = 1;
    public static int countUsedBits(long z) {
        if (z == 0) {
            return l;
        } else {
            ++l;
            return countUsedBits(log, z >>> 1);
        }
    }

问题在于,返回的数字始终是正确数字的1倍(太大)。感谢您提前提供的帮助!

java count bit
1个回答
1
投票

以二进制表示N所需的位数是log的以2为基础的N,称为log2 N。得到结果后,即使结果是整数,也要四舍五入。

示例。

  1. 4的log2 =2。加1并得到3。所以4需要3位]]
  2. log2 of 8 =3。加1并得到4。因此8需要4位。
  3. 请注意,上面的4到7之间的所有字符都需要3位。

记住,对数基本上是一个指数。因此,当给定的底数为2时,resultlog2 N是指数,使得2^result = N(在这种情况下,^表示加到该幂)。

编辑:

您的回答非常接近。首先设置l = 0,然后设置return l。它应该工作。并且您的递归调用不应包含z == 0以外的任何内容。

注意:您的方法存在的一个问题是,您需要为每个调用保持重置l,这对用户不友好。因此,不需要单独值的另一种方法是执行以下操作:

z>>>1

我建议您添加一些打印声明,以查看进展情况。

© www.soinside.com 2019 - 2024. All rights reserved.