Die symmetrische 7-Bit-Kodierung für Integer-Werte

Die symmetrische 7-Bit-Kodierung für Integer-Werte ist eine Weiterentwicklung der variablen 7-Bit-Kodierung. Je nach zu kodierendem Wert werden 1 bis n Byte belegt. Das höchste Bit eines jeden Bytes gibt an, ob zur Abbildung eines Wertes ein weiteres Byte verwendet wurde. Durch die Einführung eines Vorzeichenbits im ersten Byte werden negative und positive Werte gleichermaßen gut abgebildet.

Möglichkeiten Wertebereich binäre Kodierung
27-1 -63 bis 63 0Sxxxxxx
214-1 -8191 bis 8191 1Sxxxxxx 0xxxxxxx
221-1 -1048575 bis 1048575 1Sxxxxxx 1xxxxxxx 0xxxxxxx
228-1 -1,34·108 bis 1,34·108 1Sxxxxxx 1xxxxxxx 1xxxxxxx 0xxxxxxx
235-1 -1,72·1010 bis 1,72·1010 1Sxxxxxx 1xxxxxxx 1xxxxxxx 1xxxxxxx 0xxxxxxx

Im Gegensatz zur Einer- und Zweierkomplementdarstellung hat diese Vorzeichen-Betrag-Darstellung zwei Darstellungsvarianten für den Wert Null: +0 und -0. Dies ist eine logische Konsequenz der Symmetrie.

Anpassung an einen bestimmten Wertebereich

Das symmetrische Kodierungsverfahren kann durch einen Versatz, der beim Kodieren addiert und beim Dekodieren subtrahiert wird, an einen bestimmten Wertebereich angepasst werden. Ein Offset von -63 stellt die optimale Anpassung für einen möglichen Wertebereich von 0 bis 126 dar, da so für jeden Wert genau 1 Byte kodiert wird.

Einsatzgebiete der symmetrischen 7-Bit-Kodierung für Integer-Werte

Die symmetrische 7-Bit-Kodierung für Integer-Werte eignet sich zur effizienten Serialisierung bzw. Deserialisierung von Integer-Werten, wenn betragsmäßig kleinere Werte wahrscheinlicher sind als größere.

Vorteile im Überblick

  • reduzierter Speicherbedarf bei betragsmäßig kleinen Werten
  • gleichermaßen gute Unterstützung von positiven und negativen Werten
  • vollständige Kompatibilität zwischen 32-Bit- und 64-Bit-Funktionen
  • einfache Adaption an einen bestimmten Wertebereich

Implementierung für 32- und 64-Bit-Integer in C#

Prozessoren benutzen für Integer-Zahlen die Zweierkomplementdarstellung. Daraus resultiert ein zusätzlicher negativer Wert, bspw. -128 (80h) für Werte vom Typ SByte.

Der für das Kodieren verwendete Algorithmus basiert darauf, zuerst das Vorzeichen aus dem Wert zu extrahieren, und danach den absoluten Betrag des Wertes zu kodieren.

Der zusätzliche negative Wert, der sich aus der Zweierkomplementdarstellung ergibt, kann jedoch nicht ohne Formaterweiterung in einen positiven Wert umgewandelt werden. Deshalb muss dieser spezielle Fall sowohl beim Kodieren als auch beim Dekodieren gesondert behandelt werden.

Die Bibliothek Liersch.Utilities enthält die Implementierung der symmetrischen und variablen 7-Bit-Kodierung. Ein Modultest belegt die korrekte Funktion der Kodierung und Dekodierung.

Die Bibliothek kann über GitHub bezogen werden: https://github.com/steffen-liersch/Liersch.Utilities

Ähnliche Artikel

Schreiben Sie einen Kommentar