ランダムな整数を表すために必要なビット数を見つけるための最も効率的な方法は何ですか?たとえば、数値30,000は2進数で表されます。
111010100110000
したがって、15ビットが必要です
ランダムな整数を表すために必要なビット数を見つけるための最も効率的な方法は何ですか?たとえば、数値30,000は2進数で表されます。
111010100110000
したがって、15ビットが必要です
あなたは試すことができます:
Math.Floor(Math.Log(30000, 2)) + 1
また
(int) Math.Log(30000, 2) + 1
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を追加するだけです。
log(number)/ log(2)を試してください。次に、それを次の整数に切り上げます。