所以我的问题是我必须递归地找到显示/保存数字所需的位数,例如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
所需的位数是log
的以2
为基础的N
,称为log2 N
。得到结果后,即使结果是整数,也要四舍五入。
示例。
请注意,上面的4到7之间的所有字符都需要3位。
记住,对数基本上是一个指数。因此,当给定的底数为2时,result
的log2 N
是指数,使得2^result = N
(在这种情况下,^
表示加到该幂)。
编辑:
您的回答非常接近。首先设置l = 0
,然后设置return l
。它应该工作。并且您的递归调用不应包含z == 0
以外的任何内容。
注意:您的方法存在的一个问题是,您需要为每个调用保持重置l,这对用户不友好。因此,不需要单独值的另一种方法是执行以下操作:
z>>>1
我建议您添加一些打印声明,以查看进展情况。