たとえば、数十億の正の整数を格納するために必要なビット数はいくつですか。これを見つけるためにlog2Nを使用する必要がありますか?
3 に答える
間違った答えが何度も報告されているのを見て、正解を投稿しようと思いました。
正の整数nを表すために必要なビット数は次のとおりです。
bits = floor( log2(n) + 1 )
ここで、log2はログベース2を意味します。
はい。ビットには2^kのオプションがあり、そのうちの1つがゼロであるため、kビットに格納される最大数は2^k-1です。
したがって、数値Nを格納するために必要なビット数はlog2(N)ですが、ハーフビットがないため、上記の最も近い整数に切り上げる必要があります。
注:負の数を含める必要がある場合は、符号用にもう1ビット必要です。
N
前の答えに追加するだけで、任意の対数を使用して数値を数学的に表すために必要なビット数を把握できます。たとえば、数値12345を表すのに必要なビット数を知りたいのですが、電卓はln
(自然対数)しか知りません。
それで、
2^b = 12345
ln
両側を取ります。
ln(2^b) = ln(12345)
もちろん、指数に対する数値の対数は、その指数に底のみの対数を掛けたものです。つまり、
b*ln(2) = ln(12345)
両側をln(2)で除算し、
b = ln(12345) / ln(2)
そしてもちろん、他の回答で述べられているように、ある数値を表すには2 ^ bがその数値以上である必要があるため、この結果を切り上げる必要があります。
それで、
b = ceil(ln(12345) / ln(2))
ここで、最も近い整数に切り上げますceil(f)
。f
上記のプロセスを使用すると、N
任意の対数ベースを使用して、任意の数に必要なビット数を見つけることができますlogb
。
b = ceil(logb(N) / logb(2))