你好:)我想用这个方法计算二进制数
private static int helper ( int c,int zaehler){
if (c>>1 == 1){
return zaehler + 2;
}else{
return helper(c>>1,zaehler++);
}
答案 0 :(得分:0)
所以你想递归计算表示数字所需的位数(即log2)?
class Foo {
private static int helper (int c, int zaehler){
if (c == 0) {
// Base case, c = 0 so no more bits to count
return zaehler;
} else {
// c >>> 1 is the number without the LSB (assuming Java)
return helper(c >>> 1, zaehler + 1);
}
}
public static void main(String[] args) {
System.out.println(helper(Integer.parseInt(args[0]), 1));
}
}
以下示例显示它有效:
$ java Foo 5 # 5 = 101
3
$ java Foo 15 # 15 = 1111
4
$ java Foo 16 # 16 = 10000
5
答案 1 :(得分:0)
鉴于您对@thatotherguy所要求的内容进行了澄清,您可以在不使用zaehler
的情况下实现此目的并使其成为public
,而不会让自己面临以下风险:某人将使用第二个参数无效。
class TestNumBits {
public static int numBits(int c) {
if (c > 0) {
return 1 + numBits(c / 2);
}
if (c == 0) {
return 0;
}
return numBits(-c);
}
public static void main(String[] args) {
System.out.println(numBits(Integer.parseInt(args[0])));
}
}
示例输出:
$ java TestNumBits 3
2
$ java TestNumBits 5
3
$ java TestNumBits -5
3
$ java TestNumBits 10
4
$ java TestNumBits 16
5