web-dev-qa-db-ja.com

10進法で1桁あたりのビット数

私は、コンピューティングにおける番号付けシステムについて少数の人々に教えるつもりです。そして、1桁あたりのビット数が10進数でどのくらいあるか疑問に思いました。

  • 16進数(16進数) - 4ビット
  • 8進数(基数8) - 3ビット
  • バイナリ(基数2) - 1ビット
  • 10進数(10進数) - ?
29
user92592

あなたが探しているのは10の2を基にした対数です、そして、それはおよそ3.32192809489の無理数です...

10進数に整数のビット数を使用できないという事実が、10進法で表現するのが簡単な分数(例:1/5または0.2)が不可能な理由(根本的な原因:難しいことではありません)不可能)バイナリで表現すること。これは、浮動小数点演算で丸め誤差を評価するときに重要です。

98
Eugen Rieck

言い換えれば、これらのシステムの1桁に含まれる情報量はどれくらいですか。

ベース2、ベース4、ベース8、ベース16、その他2N 基数2では、答えは明白です。N 各桁は正確にN桁で表すことができます。

どうやってNを与えます2N?さて、あなたは2の対数を使います。これは指数の逆数です。

  • ログ2 2 = 1(基数2の1桁につき1ビット)
  • ログ2 4 = 2(基数4の1桁あたり2ビット)
  • ログ2 8 = 3(基数8の1桁あたり3ビット)
  • ログ2 16 = 4(基数16の1桁あたり4ビット)

Kの累乗ではない数字のKベースの対数は、基数ではありません。特に:

  • ログ2 10 = 3.321928094887362347870319429489390175864831393024580612054…

この数は分かりにくいかもしれませんが、実際にはいくつかの用途があります。たとえば、1桁の10進数の エントロピー です。

あなたの場合は、しかし、私はこの値は何の役にも立たないと思う。 @ Christianの答え はその理由を説明するのに良い仕事をしています。

21
gronostaj

ビットの主題に関して:

質問が間違っていると言って申し訳ありません。あなたはそのようにビットを使うことはないでしょう。 ビットは2進数です 。 10進数の10を2進数の1010(8 + 2)に変換できるので、10進数の10を表現するには4ビットが必要です。


2の力

例としてbinary(2)、octal(8)、およびhexadecimal(16)を使用することによって、ちょっとした罠に陥ったことがあります。これらはすべて2のべき乗であり、したがってビットの観点から考えることができます一方、10は2のべき乗ではないため、それほどうまく機能しません。

8
Christian

BCD - 2進化10進数は1桁あたり4ビットを使用します。これは16進数と同じです。

https://en.wikipedia.org/wiki/Binary-coded_decimal

7
CWS Matt

これは単純化し過ぎるかもしれませんが、どちらを質問しているかによって異なります。
(そして答えは基本的に8進数または16進数です)

実際の使用ではビットは分数を持たないので、私は小数ビットをビットとみなしません。

Q1:10進数で何ビットまで表現できますか

A1:3桁の情報を1桁の10進数で表すことができます。

最も一般的な方式は、0 = 8 = 000および1 = 9 = 001の折り返し付きストレートバイナリです。しかし、あなたがこれをビットを10進数にエンコードする唯一の方法であると言っているものは何もない、あなたはどんな計画を使うこともできます。

  • 0:000
  • 1:001
  • 2:010
  • 3:011
  • 4時100分
  • 5時101分
  • 6:110
  • 7時111分
  • 8:000 < - ラッピング(または未使用)
  • 9:001 < - 折り返し(または未使用)

または

Q2:10進数を表すのに何ビットかかりますか?

A2:すべての10進数を表すには最低4ビット必要です。無駄やラッピングがあります。

繰り返しますが、最も一般的なスキームはラッピング付きのストレートバイナリですが、他のスキームを使用することもできます。

  • 0:0000
  • 1:0001
  • 2:0010
  • 3:0011
  • 4時01分
  • 5:0101
  • 6:0110
  • 7:0111
  • 8:1000
  • 9:1001
  • 0:1010 < - 折り返し(または未使用)
  • 1:1011 < - 折り返し(または未使用)
  • 2:1100 < - 折り返し(または未使用)
  • 3:1101 < - 折り返し(または未使用)
  • 4:1110 < - 折り返し(または未使用)
  • 5:1111 < - 折り返し(または未使用)
3
Justin Ohms

したがって、他の人が10ビットを無駄にせずにバイトに簡単に変換できないと言っているように、ビットの使用は2の累乗を意味します。一般的な解決策は、16進数で4ビットを使用し、A〜Fとして表される6つの状態を無駄にすることです。面白いことに、これを使って10進数演算をしています - それはきちんとしていて単純ではありません。

彼が1本の手あたり4本の指しか持っていないので、Micky Mouseがどのように計数システムを開発したかを比較することは、有益な教育の考えかもしれません。

3
davidgo

基数1024では、各シンボルは10ビットです。 3桁の10進数は、1000より小さい1桁の10進数の1桁と同じ情報量を持ちます。したがって、1桁の10進数は10/3ビットよりわずかに少なくなります。正確な数は3.321928 ...であるのに対し、この近似は3.333333 ...を与えます。

2
Acccumulation
  • 16進数(16進数) - 4ビット
  • 8進数(基数8) - 3ビット
  • バイナリ(基数2) - 1ビット
  • 10進数(10進数) - 3 1/3ビット。
    210年 = 1,024
    103 = 1,000
    220 = 1,048,576
    106 = 1,000,000
    10進数で999までの3桁を2進数の10ビットで保持できます。
    基数10の6桁から最大999,999までは、基数2の20ビットで保持できます。
    これは、キロバイト、メガバイト、ギガバイトの発想です。
2
Russell Hankins

免責事項 - 私は情報理論家ではなく、主にCおよびC++(したがって、固定幅型)で機能するコードモンキーです。私の答えは、その特定の観点からです。

1桁の10進数を表すには平均 3.2ビットかかります。0から7は3ビットで表すことができますが、8と9は4が必要です。(8*3 + 2*4)/10 == 3.21

これはそれほど効果的ではありません。一つには、あなたは明らかに少しの端数を持っていません。もう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進数に相当するものは010101101です。それでも、値255のバイナリ表現は11111111です。値の中の10進数の any とバイナリシーケンスとの間には、まったく対応がありません。しかし、16進数 - F == 1111と直接対応しているので、値は16進数でFFとして表すことができます。

9ビットのバイトと36ビットのワードが一般的なシステムでは、ビットは3つに自然にグループ化されるので、8進数のほうが理にかなっています。




  1. 実際には、0と1は1ビットしか必要としないのに対し、2と3は2ビットしか必要としないため、1桁あたりの平均は小さくなります。しかし、実際には、0から7までを3ビットと見なします。いろいろな意味で生活を楽にするだけです。
0
John Bode

私がこれを教えているのであれば、まず数字(一連の数字で表現される)の意味を説明します。すなわち、右から左へ、基数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パーセント程度ずれても構わないのであれば、概算ではかなりうまくいきます。

0
Dale Chatham