查找保存 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
所需的位数是N
的log
基数2
,称为log2 N
。一旦得到结果,四舍五入,即使结果是整数。
示例。
- 4 的 log2 = 2。加 1 得到 3。所以 4 需要 3 位
- log2 of 8 = 3。加 1 得到 4。所以 8 需要 4 位。
请注意,以上任何介于 4 和 7 之间的值都需要 3 位。
请记住,对数基本上是指数。因此,当给定基数为 2 时,log2 N
的 result
就是 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;
}
我建议您输入一些打印语句以查看其进展情况。
所以我的问题是我必须递归地找到显示/保存数字所需的位数,例如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
所需的位数是N
的log
基数2
,称为log2 N
。一旦得到结果,四舍五入,即使结果是整数。
示例。
- 4 的 log2 = 2。加 1 得到 3。所以 4 需要 3 位
- log2 of 8 = 3。加 1 得到 4。所以 8 需要 4 位。
请注意,以上任何介于 4 和 7 之间的值都需要 3 位。
请记住,对数基本上是指数。因此,当给定基数为 2 时,log2 N
的 result
就是 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;
}
我建议您输入一些打印语句以查看其进展情况。