{"id":143,"date":"2010-05-29T13:32:57","date_gmt":"2010-05-29T11:32:57","guid":{"rendered":"http:\/\/www.steffen-liersch.de\/content\/de\/?p=143"},"modified":"2025-03-02T11:31:52","modified_gmt":"2025-03-02T10:31:52","slug":"symmetric-7-bit-encoding","status":"publish","type":"post","link":"https:\/\/www.steffen-liersch.de\/content\/de\/2010\/05\/symmetric-7-bit-encoding\/","title":{"rendered":"Die symmetrische 7-Bit-Kodierung f\u00fcr Integer-Werte"},"content":{"rendered":"<p>Die symmetrische 7-Bit-Kodierung f\u00fcr Integer-Werte ist eine Weiterentwicklung der <a href=\"\/content\/de\/2010\/05\/variable-7-bit-encoding\/\">variablen 7-Bit-Kodierung<\/a>. Je nach zu kodierendem Wert werden 1 bis n Byte belegt. Das h\u00f6chste Bit eines jeden Bytes gibt an, ob zur Abbildung eines Wertes ein weiteres Byte verwendet wurde.<!--more--> Durch die Einf\u00fchrung eines Vorzeichenbits im ersten Byte werden negative und positive Werte gleicherma\u00dfen gut abgebildet.<\/p>\n<table>\n<thead>\n<tr>\n<th>M\u00f6glichkeiten<\/th>\n<th>Wertebereich<\/th>\n<th>bin\u00e4re Kodierung<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>2<sup>7<\/sup>-1<\/td>\n<td>-63 bis 63<\/td>\n<td>0Sxxxxxx<\/td>\n<\/tr>\n<tr>\n<td>2<sup>14<\/sup>-1<\/td>\n<td>-8191 bis 8191<\/td>\n<td>1Sxxxxxx 0xxxxxxx<\/td>\n<\/tr>\n<tr>\n<td>2<sup>21<\/sup>-1<\/td>\n<td>-1048575 bis 1048575<\/td>\n<td>1Sxxxxxx 1xxxxxxx 0xxxxxxx<\/td>\n<\/tr>\n<tr>\n<td>2<sup>28<\/sup>-1<\/td>\n<td>-1,34\u00b710<sup>8<\/sup> bis 1,34\u00b710<sup>8<\/sup><\/td>\n<td>1Sxxxxxx 1xxxxxxx 1xxxxxxx 0xxxxxxx<\/td>\n<\/tr>\n<tr>\n<td>2<sup>35<\/sup>-1<\/td>\n<td>-1,72\u00b710<sup>10<\/sup> bis 1,72\u00b710<sup>10<\/sup><\/td>\n<td>1Sxxxxxx 1xxxxxxx 1xxxxxxx 1xxxxxxx 0xxxxxxx<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Im Gegensatz zur Einer- und <a href=\"http:\/\/de.wikipedia.org\/wiki\/Zweierkomplement\" rel=\"noopener\">Zweierkomplementdarstellung<\/a> hat diese Vorzeichen-Betrag-Darstellung zwei Darstellungsvarianten f\u00fcr den Wert Null: +0 und -0. Dies ist eine logische Konsequenz der Symmetrie.<\/p>\n<h2>Anpassung an einen bestimmten Wertebereich<\/h2>\n<p>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\u00fcr einen m\u00f6glichen Wertebereich von 0 bis 126 dar, da so f\u00fcr jeden Wert genau 1 Byte kodiert wird.<\/p>\n<h2>Einsatzgebiete der symmetrischen 7-Bit-Kodierung f\u00fcr Integer-Werte<\/h2>\n<p>Die symmetrische 7-Bit-Kodierung f\u00fcr Integer-Werte eignet sich zur effizienten Serialisierung bzw. Deserialisierung von Integer-Werten, wenn betragsm\u00e4\u00dfig kleinere Werte wahrscheinlicher sind als gr\u00f6\u00dfere.<\/p>\n<h2>Vorteile im \u00dcberblick<\/h2>\n<ul>\n<li>reduzierter Speicherbedarf bei betragsm\u00e4\u00dfig kleinen Werten<\/li>\n<li>gleicherma\u00dfen gute Unterst\u00fctzung von positiven und negativen Werten<\/li>\n<li>vollst\u00e4ndige Kompatibilit\u00e4t zwischen 32-Bit- und 64-Bit-Funktionen<\/li>\n<li>einfache Adaption an einen bestimmten Wertebereich<\/li>\n<\/ul>\n<h2>Implementierung f\u00fcr 32- und 64-Bit-Integer in C#<\/h2>\n<p>Prozessoren benutzen f\u00fcr Integer-Zahlen die Zweierkomplementdarstellung. Daraus resultiert ein zus\u00e4tzlicher negativer Wert, bspw. -128 (80h) f\u00fcr Werte vom Typ SByte.<\/p>\n<p>Der f\u00fcr das Kodieren verwendete Algorithmus basiert darauf, zuerst das Vorzeichen aus dem Wert zu extrahieren, und danach den absoluten Betrag des Wertes zu kodieren.<\/p>\n<p>Der zus\u00e4tzliche 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.<\/p>\n<p>Die Bibliothek Liersch.Utilities enth\u00e4lt die Implementierung der symmetrischen und variablen 7-Bit-Kodierung. Ein Modultest belegt die korrekte Funktion der Kodierung und Dekodierung.<\/p>\n<p>Die Bibliothek kann \u00fcber GitHub bezogen werden: <a href=\"https:\/\/github.com\/steffen-liersch\/Liersch.Utilities\">https:\/\/github.com\/steffen-liersch\/Liersch.Utilities<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Die symmetrische 7-Bit-Kodierung f\u00fcr Integer-Werte ist eine Weiterentwicklung der variablen 7-Bit-Kodierung. Je nach zu kodierendem Wert werden 1 bis n Byte belegt. Das h\u00f6chste Bit eines jeden Bytes gibt an, ob zur Abbildung eines Wertes ein weiteres Byte verwendet wurde.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[21,25,12,36,31],"class_list":["post-143","post","type-post","status-publish","format-standard","hentry","category-net","tag-net","tag-cs","tag-encoding","tag-open-source","tag-products"],"_links":{"self":[{"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/posts\/143","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/comments?post=143"}],"version-history":[{"count":14,"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/posts\/143\/revisions"}],"predecessor-version":[{"id":684,"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/posts\/143\/revisions\/684"}],"wp:attachment":[{"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/media?parent=143"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/categories?post=143"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/tags?post=143"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}