私は、コンピューティングの番号付けシステムについて少数の人々に教えようとしていますが、たとえば、10進数システムには1桁あたりのビット数がいくつあるのかと思っていました。
- 16進数(基数16)-4ビット
- 8進数(基数8)-3ビット
- バイナリ(基数2)-1ビット
- 10進数(基数10)-?
私は、コンピューティングの番号付けシステムについて少数の人々に教えようとしていますが、たとえば、10進数システムには1桁あたりのビット数がいくつあるのかと思っていました。
回答:
探しているのは10の2ベースの対数で、これは約3.32192809489の無理数です。
10進数字に整数ビットのビットを使用できないという事実は、10進法で表現しやすい多くの小数(1/5または0.2など)が不可能な根本的な原因です(難しくありません:本当に不可能)バイナリで表現する。これは、浮動小数点演算の丸め誤差を評価するときに重要です。
言い換えれば、これらのシステムでは、1桁に含まれる情報の量はどれくらいかということです。
基数2、基数4、基数8、基数16、およびその他の2 N基数については、基数2 Nでは各桁を正確にN桁で表現できるため、答えは明らかです。
2 Nを与えられたNをどのように取得しますか?さて、指数の逆数である2ベースの対数を使用します。
Kのべき乗ではない数値のKベースの対数は、基数ではありません。特に:
この数字はわかりにくいかもしれませんが、実際にはいくつかの用途があります。たとえば、1桁の10進数のエントロピーです。
しかし、あなたの場合、この値は何の役にも立たないと思います。@Christianの答えは、その理由を説明する上で良い仕事をしています。
質問が間違っていると言ってすみません。そのような方法でビットを使用することはありません。ビットは2進数です。10進数の10を2進数の1010(8 + 2)に変換できるため、10進数の値10を表現するには4ビットが必要です。
バイナリ(2)、8進数(8)、16進数(16)を例として使用することで、少しトラップに陥りました。これらはすべて2のべき乗であるため、ビットの観点から考えることができます。一方、10は2の累乗ではないため、そのようにはうまく機能しません。
BCD-Binary Coded Decimalは、16進数と同じ、1桁あたり4ビットを使用します。
ビットの使用は2のべき乗を意味します。したがって、他の人が言ったように、無駄なく10ビットを簡単にバイトに変換することはできません。一般的な解決策は、16進数で4ビットを使用し、AFとして表される6つの状態を浪費することです。おもしろいのは、これを使用して10進数の計算を行うことです-それはきちんとしていて単純ではありません。
有用な教育のアイデアは、Micky Mouseが1本の指が4本しかないため、自然に8進数ベースのシステムにつながるため、カウントシステムを開発した方法を比較することです。
これは単純化しすぎかもしれませんが、どの質問をしているのかに依存します。
(そして、答えは基本的に8進数または16進数です)
また、実際の使用法ではビットに小数がないため、小数ビットをビットとは見なしません。
Q1:10進数で何ビット表示できますか?
A1: 1つの10進数で3ビットの情報を表すことができます。
最も一般的なスキームは、0 = 8 = 000および1 = 9 = 001のラッピングを使用したストレートバイナリです。しかし、これをビットを10進数にエンコードする唯一の方法であると言うものは何もありません。
または
Q2:10進数を表すには何ビット必要ですか?
A2:すべての10進数を表すには、少なくとも4ビットが必要です。いくつかの廃棄物またはラッピングがあります。
繰り返しますが、最も一般的なスキームはラッピングを伴うストレートバイナリですが、他のスキームを使用することもできます。
免責事項-私は情報理論家ではなく、主にCおよびC ++で(したがって、固定幅型で)働くコードモンキーであり、その答えはその特定の観点からのものです。
これは、かかる平均 8,9 4.必要とする、3ビットで表現することができる0〜7 -単一進数字を表すために3.2ビット (8*3 + 2*4)/10 == 3.2
1。
これは、見た目ほど有用ではありません。1つには、明らかにほんの少ししかありません。別の方法として、ネイティブ整数型(つまり、BCDまたはBigIntではない)を使用している場合、値を10進数のシーケンス(またはそれらに相当するバイナリ)として格納していません。8ビットタイプは、最大3桁の10進数をとる値を格納できますが、すべての3 10進数値を8ビットで表すことはできません[0..255]
。範囲はです。[256..999]
8ビットのみで値を表すことはできません。
値について説明する場合、アプリケーションが期待する場合は10進数を使用します(たとえば、デジタルバンキングアプリケーション)。ビットについて話すときは、通常16進数またはバイナリを使用します(8ビットバイトと3ビットで割り切れない32ビットワードを使用するシステムで作業するため、8進数はほとんど使用しません)。
10進数で表現された値は、バイナリシーケンスにきれいにマッピングされません。小数を取得します255
。各桁のバイナリ等価物は次のようになり010
、101
、101
。それでも、値のバイナリ表現255
は11111111
です。間には対応だけではありません任意のバイナリ・シーケンスへの値の小数点以下の桁が。ただし、16進数の数字と直接対応しているF == 1111
ため、値はFF
16進数のように表現できます。
9ビットバイトと36ビットワードが標準であるシステムを使用している場合、ビットは自然に3にグループ化されるため、8進数がより理にかなっています。
1001001
マップします。私は、2進化10進数のシーケンスとして解釈しません。それはだ場合を想定桁あたり4ビットを使用しなければならないBCD、であることを、我々は主要な仮定しなければならないビットを、それがなければなりません。73
64 + 8 + 1
0
49
3.2
あなたが得る数字が実際に情報理論限界に違反するのを見ることができますlog(10)/log(2)
。
これを教えていたら、まず数字(一連の数字として表される)の意味を説明します。つまり、右から左へ、基数n、a * n ^ 0 + b * n ^ 1 + c * n ^ 2 ... z * n ^ yと仮定します。
それから、10 ^ 3は2 ^ 10にほぼ等しいことを説明します。これは正確ではなく、コンピューターの理由です。2kが実際に何を意味するのかよくわかりません(2,000または2,048ですか)。2 ^ 16は約2 ^(16-10)* 1,000、または2 ^ 6(64)* 1,000または64,000です。実際には65,536ですが、1%程度ずれていてもかまわない場合は、簡単に概算できます。
d
、1桁の10進数字、の範囲であるとしましょう0..9
。3*d
ビットは3桁の10進数を意味し、範囲から整数を表すことができます0..999
。全体の10ビット(バイナリと考えてください)は、の範囲を与えます0..1023
。999は1023に非常に近いが、それより少し小さい。したがってd
、10/3を少し下回るはずです。