Exzesscode
# Exzesscode

Der Exzesscode oder auch Überschuss-Code 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 $2^{n}-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=2^{n-1}$ und $0\leq p\leq m$ ist. Man spricht daher auch von einem Exzess-k-Code. Die Exzess-0-Codierung entspricht der Standardcodierung (siehe oben).

Im Folgenden sind die gebräuchlichen Exzess-k-Codes für binär dreistellige Zahlen angegeben.

| Codierung | Verschiebung | Code | Code | Code | Code | Code | Code | Code | Code |
| - | - | - | - | - | - | - | - | - | - |
| | | 000 | 001 | 010 | 011 | 100 | 101 | 110 | 111 |
| Exzess-0 | 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 |

In der nächsten Tabelle sind einige mögliche Exzess-k-Codes für binär vierstellige Zahlen aufgelistet.

| Codierung | Verschiebung | Code | Code | Code | Code | Code | Code | Code | Code | Code | Code | Code | Code | Code | Code | Code | Code |
| - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| | | 0000 | 0001 | 0010 | 0011 | 0100 | 0101 | 0110 | 0111 | 1000 | 1001 | 1010 | 1011 | 1100 | 1101 | 1110 | 1111 |
| Exzess-0 | 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 |

Historische Bedeutung hat der (4-Bit-)Exzess-3-Code, der mit dem Exzess-3 in der obigen Tabelle identisch ist – er bietet Vorteile bei der Darstellung von und dem Rechnen mit Dezimalzahlen.

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=2^{n-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=2^{n-1}$ auch kurz von der Exzess-Codierung, lässt den Zahlenwert k also weg. Wenn zum Beispiel beim Exponenten von der Exzess-Darstellung die Rede ist, ist in fast allen Fällen dieser ausgeglichene Exzesscode (halb negativ und halb nichtnegativ) gemeint.

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

Im folgenden Rechenbeispiel geht es nur um den sozusagen ausgeglichenen Exzesscode (dies ist der Fall bei $k=2^{n-1}$), der die Zahlen gleichmäßig in negative und nichtnegative teilt.

Aufgabe: Codiere bei 8 Bits die Zahl −79 in der Exzess-128-Codierung.

Die Codelänge beträgt n = 8; also gilt für die übliche Binärdarstellung:

und

Da die Zahl Exzess-128-codiert werden soll, verschiebt sich der Wertebereich auf:

bzw.

Codierung:

Damit lautet die Lösung: a = $−79_{10}$ = $00110001_{Exzess-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.

