これは私が立ち往生している宿題の質問です。
符号なし整数表現を検討してください。以下を含む 10 進数を格納するために必要なビット数は次のとおりです。
i) 3 digits ii) 4 digits iii) 6 digits iv) n digits
符号なし整数の範囲が 0 から 2^n になることはわかっていますが、数値を表すために必要なビット数がそれにどのように依存するのかわかりません。私を助けてください。
前もって感謝します。
これは私が立ち往生している宿題の質問です。
符号なし整数表現を検討してください。以下を含む 10 進数を格納するために必要なビット数は次のとおりです。
i) 3 digits ii) 4 digits iii) 6 digits iv) n digits
符号なし整数の範囲が 0 から 2^n になることはわかっていますが、数値を表すために必要なビット数がそれにどのように依存するのかわかりません。私を助けてください。
前もって感謝します。
それぞれのケースの範囲を計算し、その範囲よりも高い最小の 2 の累乗を見つけるだけです。
たとえば、i) では、10 進数 3 桁 -> 10^3 = 1000 の可能な数字なので、1000 より大きい 2 の最低べき乗を見つける必要があります。この場合は 2^10 = 1024 (10 ビット) です。
編集:基本的に、あなたが持っている桁数で可能な数字の数を見つけてから、どの桁数(他のベース、この場合はベース2、バイナリ)が少なくとも同じ可能な数字を持っているかを見つける必要があります10進数で。
指定された桁数から可能性の数を計算するには、次のようにします。possibilities=base^ndigits
したがって、10 進数が 3 桁 (基数 10) の場合、10^3=1000
可能性があります。次に、可能性の数が少なくとも 1000 になるように、バイナリ (ビット、基数 2) で桁数を見つける必要があり2^10=1024
ます2^9=512
。
これを一般化すると、次のようになります。2^nbits=possibilities <=> nbits=log2(possibilities)
i) に適用されるもの:log2(1000)=9.97
ビット数は整数でなければならないため、10 に切り上げる必要があります。
n 個の整数 (たとえば、0からn - 1 )を格納するために必要なバイナリ ビット数の式は次のとおりです。
そして丸めます。
たとえば、値 -128 ~ 127 (符号付きバイト) または 0 ~ 255 (符号なしバイト) の場合、整数の数は 256 であるため、nは 256 であり、上記の式から 8 が得られます。
0~nについては、上記の式でn + 1を使用します ( n + 1の整数があります)。
電卓では、log eは単にlogまたはln (自然対数) とラベル付けされている場合があります。
数値を表すために必要なビット数の手法を一般化するには、この方法で行います。表現にRシンボルがあり、ビット数を知りたい場合は、この方程式R = 2 ^ nまたはlog2(R)=nを解きます。ここで、nはビット数、Rは表現のシンボル数です。
10進数システムR=9の場合、9 = 2 ^ nを解くと、答えは10進数あたり3.17ビットになります。したがって、3桁の数値には9.51ビットまたは10が必要です。1000桁の数値には3170ビットが必要です。
最も簡単な答えは、必要な値をバイナリに変換し、その値に必要なビット数を確認することです。ただし、この質問では、X 桁の 10 進数が何ビットになるかを尋ねています。この場合、X 桁の最大値を選択し、その数値を 2 進数に変換する必要があるようです。
基本的な例として、1 桁の 10 進数を格納する必要があり、必要なビット数を知りたいと仮定しましょう。10 進数の 1 桁の最大値は 9 であるため、2 進数に変換する必要があります。これにより、合計 4 ビットの 1001 が生成されます。この同じ例を 2 桁の数字に適用できます (最大値は 99 で、1100011 に変換されます)。n 桁を解くには、おそらく他の桁を解いてパターンを検索する必要があります。
値を 2 進数に変換するには、商が 0 になるまで 2 で割ることを繰り返します (剰余はすべて 0 または 1 になります)。次に、剰余の順序を逆にして、数値を 2 進数で取得します。
例: 13 からバイナリへ。
これが役立つことを願っています。
商が 0 になるまで、数値を 2 で割り続けます。
n 桁の 2 進数の場合、保持できる 10 進数の最大値は次のようになります。
2^n - 1、および 2^n は、これらの桁数を使用して生成できる順列の合計です。
3桁のみが必要なケース、つまりケース1を例にとると、要件は次のとおりです。
2^n - 1 >= 999
丸太を両面に貼り、
ログ (2^n - 1) >= ログ (999)
ログ (2^n) - ログ (1) >= ログ (999)
n = 9.964 (約)。
9.964 は有効な桁数ではないため、n の ceil 値を取得すると、n = 10 が得られます。