大于lg N的最小整数

sc_*_*ray 6 java algorithm math bit-manipulation

我正在读某个地方:

大于lg N的最小整数是以二进制表示N所需的位数,与大于lo​​g10 N的最小整数是以十进制表示N所需的位数相同.

Java语句

for (lgN = 0; N > 0; lgN++, N /= 2) ; 
Run Code Online (Sandbox Code Playgroud)

是计算大于lg N的最小整数的简单方法

我可能在这里遗漏了一些东西但是Java语句如何计算大于lg N的最小整数?

ste*_*tew 8

如果重写为while循环可能会更清楚:

lgN = 0
while( N > 0 ) {
    lgN++;
    N = N/2;
}
Run Code Online (Sandbox Code Playgroud)

这可以被认为是"在我们移开所有1之前我们必须多少次右转"(让我们留下零)

  • 为清楚起见,可以使用`N = N >>> 1`(在我看来,因为算术运算符不会在我的脑海中引起位操作).这是"面向位的方法"(换句话说,你的描述更接近于"N占据多少位"的直接问题),而问题中给出的代码更接近"算术方法",即"算术方法"计算日志N"(因为它可以在2以外的基数中轻松计算). (2认同)

Nik*_*bak 1

仅在示例输入上追踪此内容有任何问题吗?

step 1) N = 10, lgN = 0
step 2) N = 5,  lgN = 1
step 3) N = 2,  lgN = 2
step 4) N = 1,  lgN = 3
step 5) N = 0,  lgN = 4
Run Code Online (Sandbox Code Playgroud)

lgN最后是4。这是大于的最小整数log(2, 10)