Exzess-Code

Der Exzesscode ist eine ganz bestimmte Binärkodierung. Hier geht es nicht um Statistik!

Im März 2016 gelang es mir, die Wikipedia-Seite über diesen Exzesscode zu überarbeiten, mich maßgeblich zu beteiligen und einiges neu zu schreiben. Das war auch dringend notwendig, wie ich meine. Das Ergebnis ist hier auf dieser Unterseite zu sehen.


Kleine Linksammlung



Zum Einstieg


Was ich schrieb bzw. übernahm

Notwendige Änderungen fett bzw. angegeben:

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).

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 sogenannte "Exzess-0"-Codierung entspricht der Standardcodierung (siehe oben).

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

Folgende Tabelle ist verbessert:

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

Folgende Tabelle ist vollständig neu hinzugefügt:

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.

Überlegung

Man betrachte die Ähnlichkeit dieser beiden Codierungsarten: Zweierkomplement und Exzess-8 (siehe hier oben).

Rechenbeispiel:

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

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
111111112 = 25510

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

00000000Exzess-128 = -12810
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.