10進法の1桁あたりのビット数[終了]


28

私は、コンピューティングの番号付けシステムについて少数の人々に教えようとしていますが、たとえば、10進数システムには1桁あたりのビット数がいくつあるのかと思っていました。

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

7
直観:求めるものはd、1桁の10進数字、の範囲であるとしましょう0..93*dビットは3桁の10進数を意味し、範囲から整数を表すことができます0..999。全体の10ビット(バイナリと考えてください)は、の範囲を与えます0..1023。999は1023に非常に近いが、それより少し小さい。したがってd、10/3を少し下回るはずです。
カミルマシオロウスキ

5
この投稿は、スーパーユーザーよりもスタックオーバーフローに適しているようです。
-gmarmstrong

21
@gmarmstrong:Mathematics.SE(または場合によってはSoftwareEngineering.SE)を主張します。これは、プログラミングの問題に直接関係していません。
フラット

10
@Flater:これは基本的に情報理論101であるため、数学は間違いなく正しい場所です
。– MechMK1

7
これを知らないのは恥ずかしいことではありませんが、知らない人は数字システムを教えるのに最適な人ではないかもしれません。
WGroleau

回答:


96

探しているのは10の2ベースの対数で、これは約3.32192809489の無理数です。

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


コメントは詳細なディスカッション用ではありません。この会話はチャットに移動さました
DavidPostill

20

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

基数2、基数4、基数8、基数16、およびその他の2 N基数については、基数2 Nでは各桁を正確にN桁で表現できるため、答えは明らかです。

2 Nを与えられたNをどのように取得しますか?さて、指数の逆数である2ベースの対数を使用します。

  • log 2 2 = 1(基数2の桁ごとに1ビット)
  • log 2 4 = 2(基数4の1桁あたり2ビット)
  • log 2 8 = 3(基数8で1桁あたり3ビット)
  • log 2 16 = 4(基数16で1桁あたり4ビット)

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

  • log 2 10 = 3.321928094887362347870319429489390175864831393024580612054…

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

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


8

ビットについて:

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


2のべき乗

バイナリ(2)、8進数(8)、16進数(16)を例として使用することで、少しトラップに陥りました。これらはすべて2のべき乗であるため、ビットの観点から考えることができます。一方、10は2の累乗ではないため、そのようにはうまく機能しません。


18
質問は見当違いではありません。情報理論の主題では、このようにビットについて話すことは完全に普通です。そして、Eugen Rieckの答えは良い答えです。

2
電子機器では一般に4ビットで表されるBCD(2進化10進数)に言及することをお勧めします。実際には、10進数を表すために使用されるビット数は通常4ですが、実装によって異なります。
-davidmneedham

1
@DavidStockinger右、それは理論的な質問か実装の質問かによって異なります。
-davidmneedham

2
ln(10)/ ln(2)は理論的な答えです。4ビットが実装の可能性が高い回答です。
-davidmneedham

2
@davidmneedhamいいえ、ほとんどの数値はバイナリで保存されます。BCDはまれな特殊な目的に使用されますが、ほとんどのエンコードは整数または浮動小数点10進数です。これらのシステムでは、ログの答えは正しいものです。特定の10進数の長さのすべての数字を格納するための最小ビット数(切り上げ)と、特定のビット数が固定数の10進数を格納しない理由を説明します。
ジャックエイドリー

7

BCD-Binary Coded Decimalは、16進数と同じ、1桁あたり4ビットを使用します。

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


「BCD」が6ビット文字エンコードを指すためによく使用されることを除いて。
ダニエルRヒックス

@MrLister-en.wikipedia.org/wiki/BCD_(character_encoding
ダニエルRヒックス

@DanielRHicksああ、OK。ウィキペディアによると、1950年代後半から1960年代前半(つまり、EBCDICが発明される前)に使用されていたため、聞いたことがないのは恥ずかしいことではありません。EBCDICという名前がその由来であることに気付いたにもかかわらずです!とにかく、あなたが言っているようにエンコーディングを指すためにBCDという用語はまだ「よく使われる」わけではありません。
ミスターリスター

3

ビットの使用は2のべき乗を意味します。したがって、他の人が言ったように、無駄なく10ビットを簡単にバイトに変換することはできません。一般的な解決策は、16進数で4ビットを使用し、AFとして表される6つの状態を浪費することです。おもしろいのは、これを使用して10進数の計算を行うことです-それはきちんとしていて単純ではありません。

有用な教育のアイデアは、Micky Mouseが1本の指が4本しかないため、自然に8進数ベースのシステムにつながるため、カウントシステムを開発した方法を比較することです。


あなたはあなたの答えで16進数をAF値を持つ16進数として参照する
つもりだったと思い

@ user92582はい、ta。修正しました。
-davidgo

そして、これらの「無駄」な6つの状態を使用して、小数点、負数、シーケンスターミネータなどをエンコードできます。私たちが小さな子供たちに教えることをするためのコードを書くだけです:p
Kaithar

@kaithar-あなたが提案しているものが有効であるとは思わない。
-davidgo

1
「10ビット」がどこから来ているのかは考えられません。10ビット= 1024値。10進数字には10個の値しかありません。
MSalters

3

これは単純化しすぎかもしれませんが、どの質問をしているのかに依存します。
(そして、答えは基本的に8進数または16進数です)

また、実際の使用法ではビットに小数がないため、小数ビットをビットとは見なしません。

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

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

最も一般的なスキームは、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:0100
  • 5:0101
  • 6:0110
  • 7:0111
  • 8:1000
  • 9:1001
  • 0:1010 <-ラッピング(または未使用)
  • 1:1011 <-ラッピング(または未使用)
  • 2:1100 <-ラッピング(または未使用)
  • 3:1101 <-ラッピング(または未使用)
  • 4:1110 <-ラッピング(または未使用)
  • 5:1111 <-ラッピング(または未使用)

2

ベース1024では、各シンボルは10ビットです。3桁の10進数の情報は、ベース1000の1桁と同じ量で、1024をわずかに下回っています。したがって、10進数のビットは10/3ビットよりもわずかに少なくなっています。この近似値は3.333333 ...となりますが、正確な数は3.321928 ...です。


2
  • 16進数(基数16)-4ビット
  • 8進数(基数8)-3ビット
  • バイナリ(基数2)-1ビット
  • 10進数(基数10)-3 1/3ビット。
    2 10 = 1,024
    10 3 = 1,000
    2 20 = 1,048,576
    10 6 = 1,000,000
    ベース10の3桁から999までは、ベース2の10ビットに保持できます。
    ベース10に6桁は、999,999までのベースは20ビットに保持できます。 2.
    これは、キロバイト、メガバイト、ギガバイトの起源でした。

実際には3 1/3よりわずかに少ない...あなたの答えは少し曖昧で、0から1023までの数字の代わりに999までの数字を保存できるという提案は少し誤解を招くかもしれません。
-wizzwizz4

0

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

これは、かかる平均 8,9 4.必要とする、3ビットで表現することができる0〜7 -単一進数字を表すために3.2ビット (8*3 + 2*4)/10 == 3.21

これは、見た目ほど有用ではありません。1つには、明らかにほんの少ししかありません。別の方法として、ネイティブ整数型(つまり、BCDまたはBigIntではない)を使用している場合、値を10進数のシーケンス(またはそれらに相当するバイナリ)として格納していません。8ビットタイプは、最大3桁の10進数をとる値を格納できますが、すべての3 10進数値を8ビットで表すことはできません[0..255]。範囲はです。[256..999]8ビットのみで値を表すことはできません。

について説明する場合、アプリケーションが期待する場合は10進数を使用します(たとえば、デジタルバンキングアプリケーション)。ビットについて話すときは、通常16進数またはバイナリを使用します(8ビットバイトと3ビットで割り切れない32ビットワードを使用するシステムで作業するため、8進数はほとんど使用しません)。

10進数で表現された値は、バイナリシーケンスにきれいにマッピングされません。小数を取得します255。各桁のバイナリ等価物は次のようになり010101101。それでも、値のバイナリ表現25511111111です。間には対応だけではありません任意のバイナリ・シーケンスへの値の小数点以下の桁が。ただし、16進数の数字と直接対応しているF == 1111ため、値はFF16進数のように表現できます。

9ビットバイトと36ビットワードが標準であるシステムを使用している場合、ビットは自然に3にグループ化されるため、8進数がより理にかなっています。


  1. 実際、0と1は1ビットしか必要としないのに対し、2と3は2ビットしか必要としないため、1桁あたりの平均は小さくなります。しかし、実際には、0〜7は3ビットを取ると考えています。多くの点で人生を楽にします。


4
それほど単純ではありません。たとえば、3または4ビットのエンコーディングでは100100191またはのどちらであるかを判断するには不十分49です。

@Hurkyl:繰り返しますが、私の視点は固定幅整数型を使用しています- ()に1001001マップします。私は、2進化10進数のシーケンスとして解釈しません。それはだ場合を想定桁あたり4ビットを使用しなければならないBCD、であることを、我々は主要な仮定しなければならないビットを、それがなければなりません。7364 + 8 + 1049
ジョンボード

2
可変長エンコーディングは、あなたが作るほど単純ではないことを指摘しようとしていました。あるシンボルが終了し、別のシンボルが開始する場所を伝える必要があります。したがって、8と9を4ビットで、4-7を3ビットで、2-3を2ビットで、0-1を1ビットで表すことができると言うことはできません。そして、あなたは3.2あなたが得る数字が実際に情報理論限界に違反するのを見ることができますlog(10)/log(2)

@Hurkyl:私は何もシンプルにしようとしていませんでしたし、どんな種類のエンコーディングについても話していませんでした。32ビット整数で表現できる最大値は10進数10桁(3.2ビット/桁)ですが、数字のバイナリエンコードと値のバイナリエンコードとの間には対応がありません。あなたは小数点以下の桁数をコードするバイナリのいくつかのフォームを使用している場合は、どちらかの幅が固定されている必要があり BCDを、またはあなたは、私が提唱していないハフマン符号化のいくつかの種類を使用する必要があります。
ジョンボード

1
このスキームの問題は、3ビットか4ビットかを示すために必要な余分なビットを1つ忘れたことです。そして、10進数あたり4.2ビットの平均長さで、これはBCD
MSalters

0

これを教えていたら、まず数字(一連の数字として表される)の意味を説明します。つまり、右から左へ、基数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%程度ずれていてもかまわない場合は、簡単に概算できます。


これは賢明な洞察であり、OPのコースカリキュラムへの貴重な貢献ですが、質問に対する答えではありません。
スコット
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.