Ich werde eine kleine Gruppe von Leuten über die Nummerierungssysteme beim Rechnen unterrichten und habe mich gefragt, wie viele Bits pro Ziffer es im Dezimalsystem gibt, zum Beispiel:
- Hex (Basis 16) - 4 Bits
- Oktal (Basis 8) - 3 Bits
- Binär (Basis 2) - 1 Bit
- Dezimalzahl (Basis 10) -?
d
einer Dezimalstelle, dem Bereich von0..9
.3*d
Bits bedeuten drei Dezimalstellen und ermöglichen die Darstellung von Ganzzahlen aus dem Bereich0..999
. Ganze zehn Bits (denke jetzt binär) ergeben einen Bereich von0..1023
. 999 ist ziemlich nah an 1023, aber etwas weniger. Man kann also erwarten,d
dass etwas weniger als 10/3 sein sollte.Antworten:
Was Sie suchen, ist der 2-basierte Logarithmus von 10, was eine irrationale Zahl von etwa 3,32192809489 ist ....
Die Tatsache, dass Sie keine ganzzahlige Anzahl von Bits für eine Dezimalstelle verwenden können, ist die Hauptursache dafür, dass viele Brüche, die im Dezimalsystem leicht auszudrücken sind (z. B. 1/5 oder 0,2), unmöglich sind (nicht schwer: wirklich) unmöglich) binär auszudrücken. Dies ist wichtig bei der Auswertung von Rundungsfehlern in Gleitkomma-Arithmetiken.
quelle
Mit anderen Worten, welche Informationsmenge ist in diesen Systemen in einer einzelnen Ziffer enthalten.
Für Basis 2, Basis 4, Basis 8, Basis 16 und andere 2 N- Basen ist die Antwort offensichtlich, da in einer Basis 2 N jede Ziffer mit genau N Ziffern ausgedrückt werden kann.
Wie bekommt man N 2 N gegeben ? Nun, Sie verwenden einen 2-basierten Logarithmus, der eine Umkehrung der Potenzierung ist.
K-basierte Logarithmen von Zahlen, die keine Potenzen von K sind, sind keine Kardinalzahlen. Bestimmtes:
Diese Nummer mag verwirrend aussehen, hat aber tatsächlich einige Verwendungszwecke. Zum Beispiel ist es eine Entropie einer einzelnen Dezimalstelle.
Für Ihren Fall halte ich diesen Wert jedoch nicht für sinnvoll. @Christians Antwort ist gut darin zu erklären, warum.
quelle
Zum Thema Bits:
Es tut mir leid zu sagen, dass die Frage falsch ist. Sie würden Bits auf diese Weise nicht verwenden. Ein Bit ist eine Binärziffer . Sie können die Dezimalzahl 10 in eine Binärzahl 1010 (8 + 2) umwandeln, sodass Sie 4 Bits benötigen, um den Dezimalwert 10 auszudrücken.
Potenzen von 2
Sie sind in eine Falle geraten, indem Sie als Beispiele binär (2), oktal (8) und hexadezimal (16) verwenden, weil dies alles Potenzen von 2 sind, und Sie können sich diese also in Bits vorstellen. wohingegen 10 keine Potenz von 2 ist, funktioniert es einfach nicht so gut.
quelle
BCD - Binary Coded Decimal verwendet 4 Bits pro Ziffer, genau wie Hexadezimal.
https://en.wikipedia.org/wiki/Binary-coded_decimal
quelle
Die Verwendung von Bits impliziert eine Potenz von 2, daher kann man, wie andere gesagt haben, 10 Bits nicht ohne Verschwendung in Bytes zerlegen. Eine übliche Lösung besteht darin, 4 Bits als Hexadezimalzahl zu verwenden und die 6 als AF dargestellten Zustände zu verschwenden. Das Interessante dabei ist, Dezimalzahlen zu berechnen - es ist nicht einfach und ordentlich.
Eine nützliche Unterrichtsidee könnte sein, zu vergleichen, wie Micky Mouse ein Zählsystem entwickelt hat, da er nur 4 Finger pro Hand hat - was natürlich zu einem oktalbasierten System führt.
quelle
Dies mag eine zu starke Vereinfachung sein, hängt jedoch davon ab, welche Frage Sie stellen.
(und die Antwort ist im Grunde oktal oder hex)
Ich betrachte auch Bruchbits nicht als Bits, weil Bits im praktischen Gebrauch keine Brüche haben.
F1: Wie viele Bits können Sie in einer Dezimalstelle darstellen ?
A1: Sie können 3 Informationsbits in einer einzelnen Dezimalstelle darstellen:
Das gebräuchlichste Schema wäre Straight Binary mit Umbruch, wobei 0 = 8 = 000 und 1 = 9 = 001. Sie können jedoch jedes Schema verwenden, da nichts besagt, dass dies die einzige Möglichkeit ist, Bits in Dezimalstellen zu codieren.
oder
F2: Wie viele Bits werden benötigt, um eine Dezimalstelle darzustellen?
A2: Sie benötigen mindestens 4 Bits, um alle Dezimalstellen darzustellen. Mit etwas Abfall oder Verpackung.
Auch hier wäre das gebräuchlichste Schema ein reines Binärschema mit Umbruch, aber Sie könnten jedes andere Schema verwenden.
quelle
In der Basis 1024 besteht jedes Symbol aus 10 Bits. Drei Dezimalstellen haben dieselbe Informationsmenge wie eine Stelle in der Basis 1000, was etwas weniger als 1024 ist. Daher hat eine Dezimalstelle etwas weniger als 10/3 Bits. Diese Annäherung ergibt 3.333333 ..., während die genaue Zahl 3.321928 ... ist.
quelle
2 10 = 1.024
10 3 = 1.000
2 20 = 1.048.576
10 6 = 1.000.000
3 Ziffern in Basis 10 bis 999 können in 10 Bits in Basis 2
gespeichert werden . 6 Ziffern in Basis 10 bis 999.999 können in 20 Bits in Basis gespeichert werden 2.
Dies ist die Idee, aus der Kilobyte, Megabyte und Gigabyte entstanden sind.
quelle
Haftungsausschluss - Ich bin kein Informationstheoretiker, sondern nur ein Code-Affe, der hauptsächlich in C und C ++ (und damit bei Typen mit fester Breite) arbeitet, und meine Antwort wird aus dieser bestimmten Perspektive lauten.
Die Darstellung einer einzelnen Dezimalstelle dauert im Durchschnitt 3,2 Bit - 0 bis 7 können in 3 Bit dargestellt werden, während 8 und 9 4 erfordern.
(8*3 + 2*4)/10 == 3.2
1 .Dies ist weniger nützlich als es sich anhört. Zum einen haben Sie offensichtlich keine Bruchteile. Zum anderen speichern Sie, wenn Sie native Integer-Typen verwenden (dh nicht BCD oder BigInt), keine Werte als Folge von Dezimalstellen (oder deren binären Äquivalenten). Ein 8-Bit-Typ kann einige Werte mit bis zu 3 Dezimalstellen speichern, Sie können jedoch nicht alle 3-Dezimalstellen-Werte in 8 Bit darstellen - der Bereich ist
[0..255]
. Sie können die Werte nicht darstellen[256..999]
nur in 8 Bits darstellen.Wenn es sich um Werte handelt , verwenden wir Dezimalzahlen, wenn die Anwendung dies erwartet (z. B. eine Digital-Banking-Anwendung). Wenn es um Bits geht , verwenden wir normalerweise hexadezimal oder binär (ich verwende fast nie oktal, da ich auf Systemen arbeite, die 8-Bit-Bytes und 32-Bit-Wörter verwenden, die nicht durch 3 teilbar sind).
In Dezimalzahlen ausgedrückte Werte werden Binärsequenzen nicht sauber zugeordnet. Nehmen Sie den Dezimalwert
255
. Die binären Äquivalente jeder Ziffer wäre010
,101
,101
. Die binäre Darstellung des Wertes255
ist jedoch11111111
. Es gibt einfach keine Übereinstimmung zwischen jeder der Dezimalstellen in dem Wert der binären Sequenz. Es besteht jedoch eine direkte Korrespondenz mit Hexadezimalziffern -F == 1111
, sodass dieser Wert alsFF
Hexadezimalzahl dargestellt werden kann.Wenn Sie sich in einem System befinden, in dem 9-Bit-Bytes und 36-Bit-Wörter die Norm sind, ist Oktal sinnvoller, da Bits von Natur aus in Dreien gruppiert werden.
quelle
1001001
Fall ist91
oder nicht49
.1001001
ordnet73
(64 + 8 + 1
) zu. Ich interpretiere es nicht als eine Folge von binär codierten Dezimalstellen. Wenn es soll BCD sein, die 4 Bits pro Ziffer verwenden müssen, dann müssen wir eine führende nehmen0
Bit, soll es so sein muss49
.3.2
Zahl, die Sie erhalten, tatsächlich die Informationstheorie verletzt , an die Sie gebunden sindlog(10)/log(2)
.Wenn ich dies unterrichten würde, würde ich zuerst erklären, was eine Zahl (ausgedrückt als Ziffernfolge) bedeutet. dh von rechts nach links unter der Annahme der Basis n, a * n ^ 0 + b * n ^ 1 + c * n ^ 2 ... z * n ^ y.
Erklären Sie dann, dass 10 ^ 3 ungefähr 2 ^ 10 entspricht. Es ist nicht genau und der Grund für Computer, wir wissen oft nicht, was 2k wirklich bedeutet (sind es 2.000 oder 2.048?). Es eignet sich ziemlich gut für schnelle Annäherungen. 2 ^ 16 ist ungefähr 2 ^ (16 - 10) * 1.000 oder 2 ^ 6 (64) * 1.000 oder 64.000. In Wirklichkeit ist es 65.536, aber wenn es Ihnen nichts ausmacht, um ein Prozent zu sparen, funktioniert es ziemlich gut für schnelle Annäherungen.
quelle