7

我有一个小问题。谁知道我们如何用 Shift_L 或 Shift_R 计算以 n 为底的对数?

例如:对于 n=2,我们有这个解决方案:

int log(int n){
int res = 0;
while((n>>=1))
    res++;
return res;
}
4

2 回答 2

29

您似乎不想要底数的对数,而是想要最大的b整数nn <= log_b(x)如果是这种情况,以下功能应该可以满足您的需求:

int intlog(double base, double x) {
    return (int)(log(x) / log(base));
}
于 2013-09-18T14:09:44.967 回答
7

好吧,如果我正确理解您的问题,这是一个数学问题,而不是实际的编程问题:

log_2 (x) = log_a (x) / log_a (2)其中 a 可以是任何基数。

因此,您可以使用math.h' 功能log(double)

double res = log(x)/log(2);

于 2013-09-18T14:07:33.770 回答