查找保存 int 数所需的位数

Finding the number of bits required to save int number

所以我的问题是我必须递归地找到显示/保存数字所需的位数,例如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(太大)。提前感谢您的帮助!

用二进制表示N所需的位数是Nlog基数2,称为log2 N。一旦得到结果,四舍五入,即使结果是整数。

示例。

  1. 4 的 log2 = 2。加 1 得到 3。所以 4 需要 3 位
  2. log2 of 8 = 3。加 1 得到 4。所以 8 需要 4 位。

请注意,以上任何介于 4 和 7 之间的值都需要 3 位。

请记住,对数基本上是指数。因此,当给定基数为 2 时,log2 Nresult 就是 2^result = N 的指数(在这种情况下,^ 表示提升到那个幂)。

编辑:

您的回答非常接近。最初设置 l = 0,然后在 z == 0 时设置 return l。它应该工作。并且您的递归调用不应包含 z>>>1.

以外的任何内容

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

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

我建议您输入一些打印语句以查看其进展情况。