没有java.lang.Math的二进制对数?

时间:2014-03-10 22:14:38

标签: java

我有一个问题,如何在不使用MATH的情况下执行二进制对数。 现在我有了这个Math.log(x)/Math.log(2)并且它可以工作但我不能使用java.lang.Math。

我该怎么办?

int bits_necessaris = (int)(log2(nat+1)); //This is correct

//the function is where I Hhave some troubles, I don't know what to do :(

public static int log2(int x) {
    return (something);
}

重要提示:当我执行Math.log(7)/Math.log(2)时,我得到了2.80XXXXX

所以我这样做了:

(int) Math.ceil(Math.log(7)/Math.log(2));

我得到2.80XXXXX四舍五入所以我得到3

函数的返回必须向上舍入,例如,如果解是6,777,则返回必须为7

1 个答案:

答案 0 :(得分:1)

您想知道表示int需要多少位?然后,有更简单的解决方案,例如:

int bitsNeededFor(int i) {
    int bits = 0;
    while (i > 0) {
        bits++;
        i /= 2;
    }
    return bits;
}

第二个想法是,以下内容更快更容易理解:

int bisNeededFor(int i) {
    return 32 - Integer.numberOfLeadingZeros(i);
}