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
Schreiben Sie einen Kommentar
Sie müssen angemeldet sein, um einen Kommentar abzugeben.