1.0.1. Ein Alfabet ist eine (meist endliche) geordnete Menge von Zeichen.
Beispiele:
1.0.2.
Ein Code ist eine Abbildung zwischen zwei Alfabeten.
Die im Code verwendeten Zeichen heißen auch Codeworte.
Codeworte können sich aus mehreren elementaren Zeichen zusammensetzen,
zum Beispiel beim Morsecode aus Punkten, Strichen, sowie Pausen.
Beispiele:
a | → | ·– |
b | → | –··· |
g | → | ––· |
e | → | · |
0 | 0010 |
1 | 0110 |
2 | 0111 |
3 | 0101 |
4 | 0100 |
5 | 1100 |
6 | 1101 |
7 | 1111 |
8 | 1110 |
9 | 1010 |
1.0.3. Ein Bit ist die kleinste Informationseinheit. Sie kann den Wert 0 oder 1 annehmen.
1.0.4. Ein binärer Code ist einer, dessen Codeworte sich aus Bits zusammensetzen.
1.0.5.
Für die Darstellung in digitalen Schaltungen eignen sich insbesondere
binäre Codes fester Stellenzahl.
(Das hängt mit der technischen Realisierung solcher Schaltungen zusammen.)
1.1. Codierung natürlicher Zahlen
1.1.1. Ein Stellenwertsystem zur Basis b ist eine Codierung, die jeder natürlichen Zahl d eine Ziffernfolge dn...d0 zuordnet (b ist eine natürliche Zahl > 2, di ∈ {0..b−1}), so dass der Zahlenwert jedes Codeworts sich wie folgt bestimmt:
dn...d0 = d = |
n
∑ i=0 | di × bi |
1.1.2. Im Dezimalsystem ist b=10.
1.1.3. Im Binärsystem oder Dualsystem ist b=2.
Für b=2 wird die Abbildung d → dn...d0 auch Binärcode genannt.
1.1.4. Im Oktalsystem ist b=8.
1.1.5. Im Hexadezimalsystem ist b=16. Zur Darstellung werden daher sechzehn verschiedene Ziffern benötigt, zu welchem Zweck die vorhandenen zehn Dezimalziffern um die Buchstaben A, B, C, D, E, F für die Ziffernwerte 10 bis 15 ergänzt werden.
1.1.6. Die folgende Tabelle enthält eine Übersicht der Darstellungen der ersten Zahlen in den verbreiteten Zahlensystemen; bei einigem Umgang damit werden sich die Darstellungen bald einprägen:
dezimal | binär | oktal | hex |
---|---|---|---|
0 | 0 | 0 | 0 |
1 | 1 | 1 | 1 |
2 | 10 | 2 | 2 |
3 | 11 | 3 | 3 |
4 | 100 | 4 | 4 |
5 | 101 | 5 | 5 |
6 | 110 | 6 | 6 |
7 | 111 | 7 | 7 |
8 | 1000 | 10 | 8 |
9 | 1001 | 11 | 9 |
10 | 1010 | 12 | A |
11 | 1011 | 13 | B |
12 | 1100 | 14 | C |
13 | 1101 | 15 | D |
14 | 1110 | 16 | E |
15 | 1111 | 17 | F |
16 | 10000 | 20 | 10 |
1.1.7. Die Beliebtheit des Oktal- und des Hexadezimalsystems beruht darauf, dass wegen 8=23 und 16=24 die Umrechnung zwischen ihnen und dem Binärsystem einfach ist, denn eine Oktal- bzw. Hex-Ziffer kann jeweils auf 3 bzw. 4 Binärziffern abgebildet werden:
570(8) = 101111000(2)
|
2A7(16) = 1010100111(2)
|
1.1.8. Die Konvertierung zwischen Zahlendarstellungen nach der Formel des Stellenwertsystems ist etwas umständlich; außerdem muss die Zwischenrechnung jeweils innerhalb des Zielsystems durchgeführt werden.
Deshalb ist es für die Praxis sehr nützlich, dass es zwei handliche Methoden zur Konvertierung zwischen Binär- und Dezimaldarstellung gibt; bei der Konvertierung von bzw. in Oktal- oder Hex-Zahlen ist es dann meist am effektivsten, das Binärsystem als Zwischendarstellung zu nehmen.
Konvertierung binär → dezimal
Trick: die Faktoren bi werden schrittweise berechnet; es gilt
dn...d0 = |
n
∑ i=0 |
di × bi | = | dn × bn + dn−1 × bn−1 + ... + d1 × b1 + d0 × b0 |
= | (...(dn × b + dn−1) × b + ... + d1) × b + d0 |
Konvertierung dezimal → binär
Trick: das Verfahren umkehren; der Wert wird solange halbiert, bis 0
übrig bleibt. Die jeweiligen Reste ergeben die Binärziffern von rechts
nach links.
Beispiel:
Werte halbieren | Reste | aufreihen |
---|---|---|
376 | ||
0 | Ergebnis: 101111000 | |
188 | ||
0 | ||
94 | ||
0 | ||
47 | ||
1 | ||
23 | ||
1 | ||
11 | ||
1 | ||
5 | ||
1 | ||
2 | ||
0 | ||
1 | ||
1 | ||
0 |
1.2.1. Addieren zweier natürlicher Binärzahlen funktioniert wie gewohnt, d.h. als Stellenwertaddition von rechts nach links.
1 | 0 | 1 | 0 | ||||
1 | 1 | 0 | 1 | 1 | |||
Übertrag | 1 | 1 | 0 | 1 | 0 | ||
Ergebnis | 1 | 0 | 0 | 1 | 0 | 1 | |
Rechenschritte | 0+1=01 | ||||||
1+1+0=10
"0 hin, 1 im Sinn" |
|||||||
0+0+1=01 | |||||||
... |
1.2.2. Multiplizieren zweier natürlicher Binärzahlen funktioniert wie gewohnt, nur einfacher. Wende eines der üblichen Multiplikationsschemen an, bei denen entweder der linke oder der rechte Faktor stellenweise mit dem anderen multipliziert und die Einzelprodukte aufsummiert werden.
10111 * 10111
10111 0 10111 10111 10111
ü 1 1 1 1 ü 101010
1000010001
1.2.3. Subtrahieren: Wir werden bald sehen, dass man Binärzahlen nicht zu subtrahieren pflegt.
1.3.1. Beim automatischen Durchführen von Rechnungen mit Hilfe digitaler Schaltungen stehen für die Darstellung der Zahlenwerte bestimmte Anzahlen von Bits zur Verfügung, die ja schließlich irgendwie elektrotechnisch realisiert werden müssen. Während sich mit dem binären Stellenwertsystem im Allgemeinen beliebig große Zahlen bearbeiten lassen, sind wir nunmehr auf einen endlichen Zahlenbereich beschränkt.
Die n-stellige Binärcodierung BCn bildet einen passenden Wertebereich natürlicher Zahlen ab in die Menge der n-stelligen Bitfolgen, wobei zunächst gemäß dem binären Stellenwertsystem codiert wird und dann mit führenden Nullen auf n Stellen aufgefüllt wird.
Beispiel: BC4 (5) = 0101
1.3.2. Wertebereich: Mit n Bits lassen sich 2n verschiedene Codeworte darstellen, also die Zahlenwerte 0, ..., 2n−1 .
1.3.3. Die Rechnung mit fester Stellenzahl funktioniert zunächst genauso wie mit unbegrenzter Stellenzahl. Gibt es jedoch einen Übertrag in die Stelle n (die n+1-ste Stelle, da die rechteste Stelle den Index 0 hat), so kann das Ergebnis in den n vorgesehenen Stellen nicht mehr dargestellt werden (es liegt außerhalb des Wertebereichs) und es liegt ein Überlauf vor.
1 | 0 | 1 | 0 | |||||||||||
1 | 0 | 1 | 1 | |||||||||||
1
0
| 1
| 0
|
|
| 0
| 1
| 0
| 1
| |
1.4.0. Zur Darstellung einer Menge ganzer Zahlen wählt man zunächst eine Codierung, bei der die negativen Zahlen leicht zu erkennen sind. Außerdem beschränken wir uns auf die Darstellung mit fester Stellenzahl.
Die Codierung positiver Zahlen soll mit der Codierung im binären
Stellenwertsystem übereinstimmen.
Für den negativen Zahlenbereichs sind die folgenden beiden
Codierungen von Bedeutung.
1.4.1. Einerkomplement-Codierung
bn−1...b0
ist die Bitfolge
en−1...e0
, bei der jedes Bit invertiert (d.h. 0 und 1 gegeneinander vertauscht)
wurde, d.h.
ei = 1 − bi
für alle i.
Die n-stellige Einerkomplement-Codierung ECn (Einerkomplementdarstellung) bildet ab:
Wertebereich: Mit n Bits lassen sich 2n verschiedene Codeworte darstellen, allerdings gibt es in der Einerkomplement-Codierung für die Null lästigerweise zwei Darstellungen (alle Bits 0 und alle Bits 1), daher sind 2n−1 Zahlen darstellbar, somit der Zahlenbereich −2n−1+1 ... 2n−1−1.
Beim Addieren in der Einerkomplement-Darstellung wird zunächst das
übliche Additionsschema (stellenweise von rechts nach links) angewandt.
Falls aus der höchsten Stelle ein Übertrag entsteht, muss dieser jedoch
in einer Korrekturaddition and niedrigster Stelle hinzuaddiert
werden.
Beispiel: subtrahiere 0101 − 0011:
0 | 1 | 0 | 1 | |||||||||||||||||||||||||||
1 | 1 | 0 | 0 | |||||||||||||||||||||||||||
1
1
| 0
| 0
|
|
| 0
| 0
| 0
| 1
|
|
|
| +
| 1
|
|
| 0
| 0
| 1
| 0
| |
1.4.2. Zweierkomplement-Codierung
bn−1...b0
wird gebildet, indem zum Einerkomplement noch 1 addiert wird.
dez. | 2er-K. |
---|---|
7 | 0111 |
6 | 0110 |
5 | 0101 |
4 | 0100 |
3 | 0011 |
2 | 0010 |
1 | 0001 |
0 | 0000 |
−1 | 1111 |
−2 | 1110 |
−3 | 1101 |
−4 | 1100 |
−5 | 1011 |
−6 | 1010 |
−7 | 1001 |
−8 | 1000 |
Nebenbemerkung: Die Korrekturaddition aus der Einerkomplement-Darstellung ist hier gewissermaßen in die Codierung integriert.
Wertebereich: Mit n Bits lassen sich 2n verschiedene Codeworte darstellen, in der Zweierkomplement-Codierung gibt es für die negativen Zahlen ein Codewort mehr – der Wertebereich ist unsymmetrisch, es ist der Zahlenbereich −2n−1 ... 2n−1−1.
Beim Addieren in der Zweierkomplement-Darstellung wird das übliche Additionsschema (stellenweise von rechts nach links) angewandt. Das Vorzeichenbit wird dabei einfach mit addiert. Falls aus der höchsten Stelle ein Übertrag entsteht, wird dieser zunächst ignoriert.
Beispiele: ...
1.5. Gleitkommazahlen
1.5.1. Zur Darstellung besonders kleiner oder großer Zahlen gibt es die Schreibweise Gleitkommadarstellung, bei der die Größenordnung des Zahlenwerts durch einen Faktor ausgedrückt wird, der aus einer Potenz zur Basis des Stellenwertsystems besteht.
Die Darstellung setzt sich zusammen aus dem Vorzeichen (+ oder −), der Mantisse (1,234) und dem Exponenten (25).
In der normierten Darstellung befindet sich vor dem Komma genau eine Ziffer ungleich 0. Eine nicht-normiert dargestellte Zahl lässt sich normieren, indem das Komma zur normierten Darstellung verschoben wird und der Exponent entsprechend angepasst. Wird das Komma um k Stellen nach rechts (links) verschoben, wird dadurch der Wert der Mantisse um den Faktor 10k erhöht (vermindert), so dass zum Ausgleich der Exponent um den Betrag k vermindert (erhöht) werden muss, damit der dargestellte Zahlenwert gleich bleibt:
1.5.2
Binäre Gleitkommadarstellung
In der binären Gleitkommadarstellung wird für den Exponenten
die Basis 2 benutzt. In der normierten Darstellung steht vor dem
Komma immer eine 1.
1.5.3 Seien y = vy × my × bey und z = vz × mz × bez zwei Zahlen in Gleitkommadarstellung, wobei jeweils v = 1 oder −1, je nach dem, ob das Vorzeichen + oder − ist.
Multiplikation
Unter Berücksichtigung der Gesetze der Potenzrechnung ist
y × z = vy × vz
× my × mz
× bey + ez
Die Komponenten der Gleitkommadarstellung beider Zahlen können also
jeweils miteinander verknüpft werden und es resultiert passenderweise
wieder eine Zahl in Gleitkommadarstellung. Das Ergebnis kann allerdings
2 Stellen vor dem Komma haben, in welchem Fall es noch normiert werden
muss. Die Schritte sind wie folgt:
1. Vorzeichen kombinieren: vy × vz |
| ||
2. Mantissen multiplizieren: my × mz | |||
3. Exponenten addieren: ey + ez | |||
4. Ergebnis normieren |
Addition
Unter Berücksichtigung der Gesetze der Potenzrechnung ist
y + z = (vy × my + vz × mz)
× bey
nur wenn ey = ez
Andernfalls ist eine Denormierung eines der beiden Summanden
durchzuführen, um die Exponenten einander anzupassen, damit eine
Addition durchgeführt werden kann.
Ist z.B. ey > ez, so verschiebe
das Komma von z um ey − ez Stellen
nach links (bzw. die Stellen von mz um diese Stellenzahl
nach rechts bei feststehendem Komma); der Exponent wird dabei angeglichen
und die Addition kann nach obiger Gleichung ausgeführt werden.
Allgemein sind die Schritte wie folgt:
1. Denormieren |
2. Mantissen unter Einbeziehung der Vorzeichen addieren bzw. subtrahieren |
3. Ergebnis normieren |
1.5.4
Standard-Gleitkommaformate
Nachdem früher jeder Computerhersteller ein eigenes Gleitkommaformat
definiert und in seiner Hardware realisiert hatte, wurden endlich von
der IEEE (Institute of Electric and Electronic Engineers) Standardformate
definiert, die sich mittlerweile durchgesetzt haben.
Der Exponent wird in Zweierkomplement-Kodierung dargestellt, von
der Mantisse, die ja in normierter Darstellung im Binären immer mit
"1," anfängt, wird nur der Nachkommateil, die sogenannte fraction,
ins Codewort aufgenommen.
Name | Bits Vorzeichen | Bits Exponent | Bits Fraction |
---|---|---|---|
IEEE 32-Bit | 1 | 8 | 23 |
IEEE 64-Bit | 1 | 11 | 52 |
TFH | 1 | 6 | 5 |
0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | 1 |
1.5.5 Ü Multipliziere die Codeworte (TFH-Format) 000010101101 × 111110110110 .