5

找出表示某个随机整数需要多少位的最有效方法是什么?例如数字 30,000 用二进制表示

111010100110000

所以它需要15位

4

3 回答 3

10

你可以试试:

Math.Floor(Math.Log(30000, 2)) + 1

或者

(int) Math.Log(30000, 2) + 1
于 2012-09-10T10:12:45.660 回答
7
int v = 30000; // 32-bit word to find the log base 2 of
int r = 0; // r will be lg(v)

while ( (v >>= 1) != 0) // unroll for more speed...
{
  r++;
}

有关更高级的方法,请参见此处http://graphics.stanford.edu/~seander/bithacks.html#IntegerLogObvious

请注意,这会计算最左边设置位的索引(14 表示 30000)。如果你想要位数,只需加 1。

于 2012-09-10T10:17:45.513 回答
3

试试 log(number)/log(2)。然后将其四舍五入到下一个整数。

于 2012-09-10T10:13:23.543 回答