我有一个问题,如何在不使用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
答案 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);
}