我有点问题。 谁知道我们如何计算日志 基数n用Shift_L或Shift_R?
例如:对于n = 2,我们有这个解决方案:
int log(int n){
int res = 0;
while((n>>=1))
res++;
return res;
}
答案 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);