5

ランダムな整数を表すために必要なビット数を見つけるための最も効率的な方法は何ですか?たとえば、数値30,000は2進数で表されます。

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を参照してください。

これにより、左端のセットビットのインデックスが計算されることに注意してください(30000の場合は14)。ビット数が必要な場合は、1を追加するだけです。

于 2012-09-10T10:17:45.513 に答える
3

log(number)/ log(2)を試してください。次に、それを次の整数に切り上げます。

于 2012-09-10T10:13:23.543 に答える