表示数字的最小位数

时间:2012-09-10 10:10:22

标签: c# integer bit-manipulation bit

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

111010100110000

所以它需要15位

3 个答案:

答案 0 :(得分:9)

您可以尝试:

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

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

答案 1 :(得分: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

请注意,这会计算最左侧设置位的索引(对于30000,为14)。如果你想要比特数,只需加1。

答案 2 :(得分:2)

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