私は、コンピューティングにおける番号付けシステムについて少数の人々に教えるつもりです。そして、1桁あたりのビット数が10進数でどのくらいあるか疑問に思いました。
あなたが探しているのは10の2を基にした対数です、そして、それはおよそ3.32192809489の無理数です...
10進数に整数のビット数を使用できないという事実が、10進法で表現するのが簡単な分数(例:1/5または0.2)が不可能な理由(根本的な原因:難しいことではありません)不可能)バイナリで表現すること。これは、浮動小数点演算で丸め誤差を評価するときに重要です。
言い換えれば、これらのシステムの1桁に含まれる情報量はどれくらいですか。
ベース2、ベース4、ベース8、ベース16、その他2N 基数2では、答えは明白です。N 各桁は正確にN桁で表すことができます。
どうやってNを与えます2N?さて、あなたは2の対数を使います。これは指数の逆数です。
Kの累乗ではない数字のKベースの対数は、基数ではありません。特に:
この数は分かりにくいかもしれませんが、実際にはいくつかの用途があります。たとえば、1桁の10進数の エントロピー です。
あなたの場合は、しかし、私はこの値は何の役にも立たないと思う。 @ Christianの答え はその理由を説明するのに良い仕事をしています。
質問が間違っていると言って申し訳ありません。あなたはそのようにビットを使うことはないでしょう。 ビットは2進数です 。 10進数の10を2進数の1010(8 + 2)に変換できるので、10進数の10を表現するには4ビットが必要です。
例としてbinary(2)、octal(8)、およびhexadecimal(16)を使用することによって、ちょっとした罠に陥ったことがあります。これらはすべて2のべき乗であり、したがってビットの観点から考えることができます一方、10は2のべき乗ではないため、それほどうまく機能しません。
BCD - 2進化10進数は1桁あたり4ビットを使用します。これは16進数と同じです。
これは単純化し過ぎるかもしれませんが、どちらを質問しているかによって異なります。
(そして答えは基本的に8進数または16進数です)
実際の使用ではビットは分数を持たないので、私は小数ビットをビットとみなしません。
Q1:10進数で何ビットまで表現できますか。
A1:3桁の情報を1桁の10進数で表すことができます。
最も一般的な方式は、0 = 8 = 000および1 = 9 = 001の折り返し付きストレートバイナリです。しかし、あなたがこれをビットを10進数にエンコードする唯一の方法であると言っているものは何もない、あなたはどんな計画を使うこともできます。
または
Q2:10進数を表すのに何ビットかかりますか?
A2:すべての10進数を表すには最低4ビット必要です。無駄やラッピングがあります。
繰り返しますが、最も一般的なスキームはラッピング付きのストレートバイナリですが、他のスキームを使用することもできます。
したがって、他の人が10ビットを無駄にせずにバイトに簡単に変換できないと言っているように、ビットの使用は2の累乗を意味します。一般的な解決策は、16進数で4ビットを使用し、A〜Fとして表される6つの状態を無駄にすることです。面白いことに、これを使って10進数演算をしています - それはきちんとしていて単純ではありません。
彼が1本の手あたり4本の指しか持っていないので、Micky Mouseがどのように計数システムを開発したかを比較することは、有益な教育の考えかもしれません。
基数1024では、各シンボルは10ビットです。 3桁の10進数は、1000より小さい1桁の10進数の1桁と同じ情報量を持ちます。したがって、1桁の10進数は10/3ビットよりわずかに少なくなります。正確な数は3.321928 ...であるのに対し、この近似は3.333333 ...を与えます。
免責事項 - 私は情報理論家ではなく、主にCおよびC++(したがって、固定幅型)で機能するコードモンキーです。私の答えは、その特定の観点からです。
1桁の10進数を表すには平均 3.2ビットかかります。0から7は3ビットで表すことができますが、8と9は4が必要です。(8*3 + 2*4)/10 == 3.2
1。
これはそれほど効果的ではありません。一つには、あなたは明らかに少しの端数を持っていません。もう1つは、ネイティブの整数型(つまりBCDやBigIntではない)を使用している場合、値を一連の10進数(またはそれに相当する2進数)として格納していないことです。 8ビット型は、3桁までの10進数を格納できる値をいくつか格納できますが、3桁すべての値を8ビットで表すことはできません。範囲は[0..255]
です。 [256..999]
の値を8ビットだけで表すことはできません。
values について話しているとき、アプリケーションがそれを期待する場合は10進数を使用します(たとえば、デジタルバンキングアプリケーション)。 bits について話しているときは、通常は16進数または2進数を使用します(8ビットバイトと32ビットワードを使用するシステムで作業するので、8進数はほとんど使用しませんこれは3)で割り切れません。
10進数で表現された値は、バイナリシーケンスにうまくマップされません。 10進値255
を取ります。各桁の2進数に相当するものは010
、101
、101
です。それでも、値255
のバイナリ表現は11111111
です。値の中の10進数の any とバイナリシーケンスとの間には、まったく対応がありません。しかし、16進数 - F == 1111
と直接対応しているので、値は16進数でFF
として表すことができます。
9ビットのバイトと36ビットのワードが一般的なシステムでは、ビットは3つに自然にグループ化されるので、8進数のほうが理にかなっています。
私がこれを教えているのであれば、まず数字(一連の数字で表現される)の意味を説明します。すなわち、右から左へ、基数nを仮定すると、a * n ^ 0 + b * n ^ 1 + c * n ^ 2 ・・・ z * n ^ yである。
10 ^ 3は2 ^ 10にほぼ等しいと説明します。これは正確ではないため、コンピュータではその理由ですが、2kが実際に何を意味するのかわからないことがよくあります。 2 ^ 16は約2 ^(16 - 10)* 1,000、または2 ^ 6(64)* 1,000または64,000です。実際には65,536ですが、1パーセント程度ずれても構わないのであれば、概算ではかなりうまくいきます。