Exzesscode
Der Exzesscode ist eine Binärkodierung, mit der sich vorzeichenbehaftete Zahlen binär repräsentieren lassen. Die Codierung basiert auf einer Wertebereichsverschiebung.
Üblicherweise werden positive Zahlen im Wertebereich 0 bis 2n-1 als n-stellige Binärzahlen wie folgt codiert (hier für den Wertebereich 0..7; Standardkodierung):
dezimal abgebildet | binär abgebildet |
---|---|
0 | 000 |
1 | 001 |
2 | 010 |
3 | 011 |
4 | 100 |
5 | 101 |
6 | 110 |
7 | 111 |
Um die binäre Darstellung von negativen Zahlen zu ermöglichen, wird hierbei der Wertebereich der Zahlen verschoben. Die Weite der Verschiebung ist normalerweise im Bereich k = m - p, wobei m = 2n-1 und 0 <= p <= m ist. Man spricht daher auch von einem Exzess-k-Code. Die Exzess-0-Codierung entspricht der Standardcodierung (siehe oben).
Im Folgenden sind einige mögliche Exzess-k-Codes für binär dreistellige Zahlen angegeben.
Codierung | Verschiebung | Code | |||||||
---|---|---|---|---|---|---|---|---|---|
000 | 001 | 010 | 011 | 100 | 101 | 110 | 111 | ||
Exzess0 | 0 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
Exzess+1 | 1 | -1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
Exzess+2 | 2 | -2 | -1 | 0 | 1 | 2 | 3 | 4 | 5 |
Exzess+3 | 3 | -3 | -2 | -1 | 0 | 1 | 2 | 3 | 4 |
Exzess+4 | 4 | -4 | -3 | -2 | -1 | 0 | 1 | 2 | 3 |
Exzess+7 | 7 | -7 | -6 | -5 | -4 | -3 | -2 | -1 | 0 |
In der nächsten Tabelle sind einige mögliche Exzess-k-Codes für binär vierstellige Zahlen aufgelistet.
Codierung | Verschiebung | Code | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0000 | 0001 | 0010 | 0011 | 0100 | 0101 | 0110 | 0111 | 1000 | 1001 | 1010 | 1011 | 1100 | 1101 | 1110 | 1111 | ||
Exzess0 | 0 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
Exzess+1 | 1 | -1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
Exzess+2 | 2 | -2 | -1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
Exzess+3 | 3 | -3 | -2 | -1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
Exzess+4 | 4 | -4 | -3 | -2 | -1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
Exzess+8 | 8 | -8 | -7 | -6 | -5 | -4 | -3 | -2 | -1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
Exzess+15 | 15 | -15 | -14 | -13 | -12 | -11 | -10 | -9 | -8 | -7 | -6 | -5 | -4 | -3 | -2 | -1 | 0 |
Historische Bedeutung hat der Exzess-3-Code, der mit dem Exzess+3 in der obigen Tabelle identisch ist.
Einen sehr wichtigen und besonderen Stellenwert hat hier der Exzess-k-Code, der hier im obigen Beispiel um acht Stellen verschoben ist (also allgemein k = 2n-1, im Beispiel: Exzess+8). Er teilt den Wertebereich der Zahlen in zwei gleich große Hälften von negativen und nichtnegativen Zahlen. Bei binär vierstelligen Codes (Dezimal 0 bis 15) repräsentiert der Exzess-8-Code also die Zahlen von -8 bis 7, bei fünfstelligen Codes wäre es der Exzess-16-Code und der Wertebereich von -16 bis 15. Man spricht im Fall k = 2n-1 auch kurz von der Exzess-Codierung, lässt den Zahlenwert k also weg.
Um eine Zahl a zu codieren, wählt man die kleinste Zahl b im Wertebereich und bildet die Differenz: d = |a - b|. Das Ergebnis wird dann wie üblich codiert.
Umgekehrt decodiert man eine Exzess-k-codierte Zahl, indem man sie zunächst nach der üblichen Codierung in eine Zahl umwandelt und dann die kleinste Zahl des Wertebereichs addiert.
Rechenbeispiel
Aufgabe: Codiere bei 8 Bits die Zahl -79 nunmehr in der Exzess-128-Codierung
Die Codelänge beträgt n = 8; also gilt für die übliche Binärdarstellung:
000000002 = 010
und
111111112 = 25510
Da die Zahl Exzess-128-codiert werden soll, verschiebt sich der Wertebereich auf:
00000000Exzess-128 = -12810
bzw.
11111111Exzess-128 = +12710
Codierung:
Die zu codierende Zahl ist a = -79. Die kleinste Zahl im Wertebereich ist b = -128 Die Differenz ist d = |-79 - (-128)| = 49 In der Standardcodierung ist d = 4910 = 001100012
Damit lautet die Lösung: a = -7910 = 00110001Exzess-128
Die Decodierung verläuft analog: 00110001 lässt sich nach der Standardcodierung zu 49 decodieren. Danach wird die kleinste Zahl des Wertebereichs addiert, hier -128, also: 49 - 128 = -79.
Anwendung
Exzesscode ist tolerant bezüglich binärer Addition/Subtraktion und lexikalischem Größenvergleich. Im IEEE 754-Standard zur Darstellung von Gleitkommazahlen wird der Exponent in einer Exzesscode-ähnlichen Form kodiert. Integerwerte werden allerdings im Rechenwerk moderner Hardware zumeist im Zweierkomplement verarbeitet.