x的记录基数n

时间:2013-09-18 13:58:59

标签: c++ math logarithm

我有点问题。 谁知道我们如何计算日志 基数n用Shift_L或Shift_R?

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

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

2 个答案:

答案 0 :(得分:13)

您似乎不希望基数b的对数,而是n的最大整数n <= log_b(x)。如果是这种情况,以下功能应满足您的需求:

int intlog(double base, double x) {
    return (int)(log(x) / log(base));
}

答案 1 :(得分:3)

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

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

因此,您可以使用math.h的函数log(double)

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