2. Zahlendarstellung und Codierungstechniken. 2.1 Maschineninterne Darstellung von Zahlen und Zeichen



Ähnliche Dokumente
2. Zahlendarstellung und Codierungstechniken

2. Zahlendarstellung und Codierungstechniken. 2.1 Maschineninterne Darstellung von Zahlen und Zeichen

2.1 Maschineninterne Darstellung von Zahlen und Zeichen 2.2 Fehlererkennende Codes 2.3 Fehlerkorrigierende Codes

Rechnerstrukturen WS 2012/13

Übung zur Wirtschaftsinformatik I. Zahlensysteme / Codierung

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Zahlensysteme und Datendarstellung

Informationssysteme Gleitkommazahlen nach dem IEEE-Standard 754. Berechnung von Gleitkommazahlen aus Dezimalzahlen. HSLU T&A Informatik HS10

Einführung in die Informatik I

Binärdarstellung von Fliesskommazahlen

2 Darstellung von Zahlen und Zeichen

Binäre Gleitkommazahlen

Vertiefungsstoff zum Thema Darstellung von Zahlen

Informatikgrundlagen I Grundlagen der Informatik I

Repräsentation von Daten Binärcodierung von rationalen Zahlen und Zeichen

Das Rechnermodell - Funktion

1. Das dekadische Ziffernsystem (Dezimalsystem) Eine ganze Zahl z kann man als Summe von Potenzen zur Basis 10 darstellen:

Technische Informatik - Eine Einführung

Zahlensysteme: Oktal- und Hexadezimalsystem

Zahlen und Zeichen (1)

Kapitel 1. Zahlendarstellung. Prof. Dr. Dirk W. Hoffmann. Hochschule Karlsruhe w University of Applied Sciences w Fakultät für Informatik

Zahlensysteme. Digitale Rechner speichern Daten im Dualsystem 435 dez = binär

Informationsdarstellung im Rechner

Grundlagen der Informatik I Informationsdarstellung

Grundlagen der Informatik

Grundlagen der Informatik 2 Grundlagen der Digitaltechnik. 1. Zahlensysteme

Musterlösung 2. Mikroprozessor & Eingebettete Systeme 1

Das Maschinenmodell Datenrepräsentation

15 Optimales Kodieren

Kapitel 3. Codierung von Text (ASCII-Code, Unicode)

Daten, Informationen, Kodierung. Binärkodierung

Zahlendarstellungen und Rechnerarithmetik*

Computerarithmetik ( )

Ein polyadisches Zahlensystem mit der Basis B ist ein Zahlensystem, in dem eine Zahl x nach Potenzen von B zerlegt wird.

Organisation. Was kommt zum Test? Buch Informatik Grundlagen bis inkl. Kapitel 7.4 Wissensfragen und Rechenbeispiele

Lösungen: zu 1. a.) b.) c.)

BITte ein BIT. Vom Bit zum Binärsystem. A Bit Of Magic. 1. Welche Werte kann ein Bit annehmen? 2. Wie viele Zustände können Sie mit 2 Bit darstellen?

Grundlagen der Informatik (BSc) Übung Nr. 5

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 18

Escape-Sequenzen. Dr. Norbert Spangler

Musterlösung 2. Mikroprozessor & Eingebettete Systeme 1

Merke: Mit jedem zusätzlichen Bit verdoppelt sich die Anzahl der darstellbaren Zahlen bzw. Zustände

X = {x 1,x 2,...} sei ein Symbolalphabet eines Kodes. In diesem Kode sind card(x) = X Sachverhalte darstellbar

Numerische Datentypen. Simon Weidmann

Grundlagen der Technischen Informatik Wintersemester 12/13 J. Kaiser, IVS-EOS

Übungen zu Informatik 1

2. Negative Dualzahlen darstellen

Zahlensysteme. Zahl Stellenwert Zahl Zahl =

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Leseprobe. Taschenbuch Mikroprozessortechnik. Herausgegeben von Thomas Beierlein, Olaf Hagenbruch ISBN:

in vielen technischen und wissenschaftlichen Anwendungen erforderlich: hohe Präzision große Dynamik möglich durch Verwendung von Gleitkommazahlen

Einstieg in die Informatik mit Java

Zahlensysteme Seite -1- Zahlensysteme

Hauptspeicherinhalt. Ton. Vektorgrafik Bitmapgrafik Digit. Video. 1. Darstellung von Daten im Rechner. Abb. 1.1: Einteilung der Daten

a) Da die Zahlen im IEEE-32Bit-Format dargestellt werden sollen, ist der Bias = 127.

Programmieren in C Einführung

Grundbegriffe der Informatik

Daten verarbeiten. Binärzahlen

Rechnerarithmetik Ganzzahlen und Gleitkommazahlen Ac 2013

Dezimalkomma (decimal point) rechts von Stelle mit Wertigkeit 100 nachfolgende Stellen haben Wertigkeit 10-1, 10-2, etc.

Primzahlen und RSA-Verschlüsselung

4 Binäres Zahlensystem

Grundlagen der Technischen Informatik. 2. Übung

Einstieg in die Informatik mit Java

Rechnerstrukturen. Michael Engel und Peter Marwedel. Sommer TU Dortmund, Fakultät für Informatik

Vorlesung Programmieren. Agenda. Dezimalsystem. Zahlendarstellung. Zahlendarstellung. Oder: wie rechnen Computer?

Übung RA, Kapitel 1.2

Einstieg in die Informatik mit Java

BSZ für Elektrotechnik Dresden. Zahlenformate. Dr.-Ing. Uwe Heiner Leichsenring

Protokollgrundlagen (Schicht 2)

Kapitel 2 Grundlegende Konzepte. Xiaoyi Jiang Informatik I Grundlagen der Programmierung

Binäre Division. Binäre Division (Forts.)

Binär- und Hexadezimal-Zahl Arithmetik.

Einführung in die Programmierung

2 Einfache Rechnungen

4. Jeder Knoten hat höchstens zwei Kinder, ein linkes und ein rechtes.

Diana Lange. Generative Gestaltung Operatoren

Numerisches Programmieren, Übungen

Eine Logikschaltung zur Addition zweier Zahlen

Englische Division. ... und allgemeine Hinweise

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = Euro ergeben.

Darstellung von Informationen

Grundzüge Wirtschaftsinformatik KE 1 Ausgabe Seite 28 von 178

Information in einem Computer ist ein

Grundlagen der Informatik Übungen 1.Termin

2 Darstellung von Zahlen und Zeichen

Im Original veränderbare Word-Dateien

Kapitel 4A: Einschub - Binärcodierung elementarer Datentypen. Einschub: Teile aus Kapitel 2 in Küchlin/Weber: Einführung in die Informatik

Kapitel 2. Zahlensysteme, Darstellung von Informationen

, WS2012 Übungsgruppen: Mo.,

Microcontroller Kurs Microcontroller Kurs/Johannes Fuchs 1

Synchronisierung. Kommunikationstechnik, SS 08, Prof. Dr. Stefan Brunthaler 73

5 DATEN Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

Technische Informatik I

1. Woche Einführung in die Codierungstheorie, Definition Codes, Präfixcode, kompakte Codes

Repräsentation von Daten: Binär-, Oktal- u. Hexadezimalcodierung von ganzen und rationalen Zahlen

Zahlensysteme Das 10er-System

Grundstrukturen: Speicherorganisation und Zahlenmengen

Mikro-Controller-Pass 1

Mikro-Controller-Pass 1

Teil II. Schaltfunktionen

Transkript:

2. Zahlendarstellung und Codierungstechniken 2.1 Maschineninterne Darstellung von Zahlen und Zeichen 2.1 Maschineninterne Darstellung von Zahlen und Zeichen 2.2 Fehlererkennende Codes 2.3 Fehlerkorrigierende Codes Alle Daten, die ein Digitalrechner speichert und verarbeitet, werden intern in Form von Bits dargestellt. Frage: Wie werden die Datentypen aus den höheren Programmiersprachen in Bitmuster abgebildet? 2. Zahlendarstellung und Codierung 2-1 2. Zahlendarstellung und Codierung 2-2

Analoge Darstellung Probleme der analogen Darstellung In der analogen Darstellung repräsentiert der technische Parameter (z. B. eine Spannung) direkt den Wert aus der Anwendung. Analoge Werte sind im Allgemeinen reelle Zahlen (Gleitkommawerte). Beispiel: Die Spannung 1 V entspricht DM 1,00, die Spannung 2,4 V entspricht DM 2,40. Analoge Größen können innerhalb eines vorgegebenen Bereiches jeden beliebigen Wert annehmen. Genauigkeit der analogen Größe Definitionsbereich der analogen Größe Arithmetische Operationen auf analogen Größen Wichtige Anwendungsbeispiele Audio im Telefonnetz und in der Unterhaltungselektronik Fernseh- und Videotechnik 20 30 40 10 Analogiegröße 0 α α 2. Zahlendarstellung und Codierung 2-3 2. Zahlendarstellung und Codierung 2-4

Digitale Darstellung Die Darstellung von Werten erfolgt in Form von Zahlen (lateinisch: digitus : der Finger; Abzählen mit den Fingern). Darstellung von Zahlen im Rechner Alle modernen Rechner arbeiten mit Dualzahlen (im binären Zahlensystem). Beispiel: der chinesiche Abakus (Rechenrahmen) 2. Zahlendarstellung und Codierung 2-5 2. Zahlendarstellung und Codierung 2-6

2.1.1 Logische Werte 2.1.2 Ganze Zahlen Daten vom Typ boolean (logische Daten) können nur die Werte true oder false annehmen. Daher genügt im Prinzip ein Bit. Häufig erfolgt aber eine Darstellung als ein Byte, da das Byte die kleinste adressierbare und damit direkt zugreifbare Einheit im Rechner ist. Positive ganze Zahlen Positive ganze Zahlen sind ein sehr häufiger Datentyp in Anwendungsprogrammen (z. B. als Feldindex, Laufvariable in Schleifen), aber auch maschinenintern als Speicheradresse usw. Eine weitverbreitete Konvention ist, dass ein Byte mit nur 0-Bits den Wert false darstellt, während ein Byte mit mindestens einem 1-Bit dem Wert true entspricht. Besonders häufig wird dabei das erste Bit im Byte interpretiert, da der Prozessor dieses besonders leicht auf 0 oder 1 prüfen kann. Die Darstellung erfolgt als Dualzahl (Zahl zur Zahlenbasis 2). Dabei entspricht jede Ziffernposition einer Zweierpotenz (wie bei Dezimalzahlen jede Ziffernposition einer Zehnerpotenz entspricht). Datentyp Bitstring Manche höhere Programmiersprachen unterstützen den Datentyp Bitstring. Dieser wird direkt auf eine Folge von Bits im Speicher abgebildet. Dazu gibt es dann eine semantische Erweiterung der Operatoren der Aussagenlogik (,,,...) auf Bitmuster, die dann bitweise verknüpft werden. 2. Zahlendarstellung und Codierung 2-7 2. Zahlendarstellung und Codierung 2-8

Positive ganze Zahlen Rechnen mit Dualzahlen Beispiel 15 10 = 1111 2 Konvertierung Dual Dezimal: Ausmultiplizieren Dezimal Dual: fortgesetzte Division durch 2 und Notieren der Reste Beispiel 30 10 als Dualzahl Arithmetische Operationen (Addition, Subtraktion, Multiplikation, Division) werden im Dualsystem analog zum Dezimalsystem ausgeführt. Merke Eine Multiplikation mit 2 entspricht einem "Linksshift" der Dualzahl, eine Division durch 2 einem Rechtsshift. Beispiel für ganze Zahlen im Hauptspeicher 30:2 = 15 Rest 0 15:2 = 7 Rest 1 7:2 = 3 Rest 1 3:2 = 1 Rest 1 1:2 = 0 Rest 1 30 10 = 11110 2 2. Zahlendarstellung und Codierung 2-9 2. Zahlendarstellung und Codierung 2-10

Oktalzahlen Das Aufschreiben von langen Bitsrtings braucht viel Platz und ist unübersichtlich. Deshalb wählt man häufig eine Darstellung in Form von Oktalzahlen oder Hexadezimalzahlen (Sedezimalzahlen). Dabei ergeben jeweils drei bzw. vier Bits eine Ziffer. Bitstring Oktalziffer 000 0 8 001 1 8 010 2 8 011 3 8 100 4 8 101 5 8 110 6 8 111 7 8 Beispiel 181 10 = 010110101 2 = 2 6 5 8 = 2*64 + 6*8 + 5 Hexadezimalzahlen (Sedezimalzahlen) (1) Jeweils vier Bits ergeben eine Hexadezimalziffer. Da wir aus dem Dezimalsystem nur zehn Ziffern kennen, müssen weitere sechs Ziffernbezeichner dazu erfunden werden. Man wählt dazu die Großbuchstaben A bis F. Bitstring Hexadezimalziffer 0000 0 16 0001 1 16 0010 2 16 0011 3 16 0100 4 16 0101 5 16 0110 6 16 0111 7 16 1000 8 16 1001 9 16 1010 A 1011 B 1100 C 1101 D 1110 E 1111 F 2. Zahlendarstellung und Codierung 2-11 2. Zahlendarstellung und Codierung 2-12

Hexadezimalzahlen (Sedezimalzahlen) (2) Negative ganze Zahlen Beispiel 181 10 = 1011 0101 2 = B 5 16 = 11*16 + 5 Erste Idee Wir wählen n-1 Bits für den Betrag als ganze Zahl und ein Bit für das Vorzeichen. Nachteile Die Null gibt es zweimal (+0, -0). Die Arithmetik wird durch Fallunterscheidungen komplizierter. Die oktale und hexadezimale Darstellung ist nicht nur für Ganzzahlen, sondern auch für beliebige andere Bitstrings gebräuchlich, z.b. zur Definition von Bitstring- Konstanten: Zweite Idee Einerkomplement Eine negative Zahl wird durch Invertieren aller Bits der positiven Zahl desselben Betrages gebildet. ALL-ONE DC X'FF' LEFT-HALF DC X'F0' Nachteile Immer noch zwei Nullen, immer noch komplizierte Arithmetik Dritte Idee Zweierkomplement 2. Zahlendarstellung und Codierung 2-13 2. Zahlendarstellung und Codierung 2-14

Zweierkomplement (1) Zweierkomplement (2) Berechnung Zweierkomplement = Einerkomplement +1 Die Darstellung auf dem Zahlenkreis veranschaulicht die Ähnlichkeit von Addition und Subtraktion. Beispiel für 3-Bit Zahlen: 2 10 = 010 2-2 10 = 101 2 + 1 = 110 2 Vorteile Vorzeichen immer noch am ersten Bit erkennbar Die Addition negativer Zahlen geschieht wie die Addition positiver Zahlen! (beim Überschreiten der Null geht der Übertrag verloren). Deshalb braucht man nur noch eine Hardware-Schaltung! Subtraktion i - j durch Bildung des Zweierkomplements von j und Addition! i - j = i + (-j) Sehr einfach in Hardware zu bauen! 2. Zahlendarstellung und Codierung 2-15 2. Zahlendarstellung und Codierung 2-16

2.1.3 Gleitkommazahlen Reelle Zahlen (Gleitkommazahlen, floating point numbers) kann man auf zwei Weisen darstellen: durch Festlegen einer Konvention, wo im Maschinenwort man sich die Kommastelle denkt (Festkommazahl, fixedpoint number) oder durch eine Repräsentation in Form von Mantisse und Exponent. Festkomma-Darstellung (fixed-point number) Darstellung reeller Zahlen ohne Exponent Festlegung einer festen Anzahl von Stellen vor und nach dem Komma durch Konvention VZ Vorkomma- Nachkommastellen Beispiel Darstellung und Addition: 19,125 =0 010011,001000 + 7,625 =0 000111,101000 26,75 =0 011010,110000 Umrechnung Dezimal x 10 Dual x 2 für x 10 < 1: 0,375 * 2 0,750 * 2 1,500 * 2 1,000 (alle Nachkommastellen = 0 Ende) Ergebnis 0,375 10 = 0,011 2 (durch Ablesen von oben nach unten) 2. Zahlendarstellung und Codierung 2-17 2. Zahlendarstellung und Codierung 2-18

Gleitkommazahlen Beispiele für Gleitkommazahlen Repräsentation der rellen Zahl in Form von Mantisse und Exponent: Eine Gleitkommazahl werde in einem 32-Bit-Wort dargestellt mit 8 Bits für e und 24 Bits für m z = m * g e, m Mantisse, e Exponent. e m m ist eine ganze Zahl mit gedachtem Komma vor der ersten Stelle. e ist ganze Zahl. g ist die Basis. Sie gilt als implizit vereinbart und wird nicht explizit dargestellt. Gebräuchlich sind g = 2 oder g = 16. (IBM-Großrechner: g = 16) Merke m < 0: negative reelle Zahl e < 0: reelle Zahl mit Betrag zwischen 0 und 1 Man überlege sich, wie die arithmetischen Operationen +, -, *, / in der obigen Gleitkomma-Darstellung ausgeführt werden! Anmerkung 1 Beim Rechnen mit Gleitkommazahlen ist die Genauigkeit beschränkt, da die Länge der Mantisse beschränkt ist. Es treten Rundungsfehler auf. Anmerkung 2 Sehr kleine Prozessoren unterstützen manchmal Gleitkommazahlen nicht in Hardware. Ihre Darstellung und Operationen darauf müssen dann in Software durch Unterprogramme des Laufzeitsystems realisiert werden. Üblich ist auch die Erweiterung des Rechners um einen zusätzlichen Gleitkommaprozessor, die wesentlich zur Beschleunigung der Ausführung numerischer Anwendungsprogramme beitragen kann. 2. Zahlendarstellung und Codierung 2-19 2. Zahlendarstellung und Codierung 2-20

Darstellung der Mantisse Problem: 0,5 10 lässt sich darstellen als 0,1 2 * 2 0 oder als 0,01 2 * 2 1 etc. Lösung: Eindeutigkeit der Darstellung durch normalisierte Mantisse (Basis g = 2), z.b.: ½ m < 1, d.h. 0,5 10 = 0,1 2 * 2 0 1 m < 2, d.h. 0,5 10 = 1,0 2 * 2-1 Werden normalisierte Mantissen vorausgesetzt, dann ist das erste Bit Immer gleich 0 bzw. 1 und braucht nicht abgespeichert zu werden (sogenanntes hidden bit ). Beispiel: Basis g = 2, Exponent e mit 6 Bit, normalisierte Mantisse m (1 m < 2) mit 6 Bit, hidden bit. 7,75 10 = 111,110 2 = (-1) 0 *1,111100 2 * 2 2 0 0 0 0 0 1 0 1 1 1 1 0 0 VZ Exponent Mantisse Versetzte Darstellung des Exponenten Diese Darstellung wird auch als Biased- oder Excess-Darstellung bezeichnet Zum tatsächlichen Exponenten wird ein bestimmter Wert (Bias) hinzuaddiert. Hat der Exponent n Bits, so beträgt dieser Wert 2 n-1. Beispiel: Basis g = 2, Exponent e mit 6 Bits in Excess- Darstellung, normalisierte Mantisse m (1 m < 2) mit 6 Bits,Verwendung des hidden bit. 7,75 10 = 111,110 2 = (-1) 0 *1,111100 2 * 2 2 Zu speichernder Exponent E = 2 + 2 6-1 = 100010 2 Vorteil dieser Darstellung: Falls für zwei Gleitkommazahlen a b gilt, so gilt das Gleiche für die (gewöhnliche) Dualdarstellung von a und b. Beispiel a = 0,5 10 = 1,0 2 * 2-1 = 0 011111 000000 b = 4 10 = 1,0 2 * 2 2 = 0 100010 000000 Ohne Excess-Darstellung wäre der Exponent von a 111111 2 und von b 000010 2 (Zweierkomplement). 2. Zahlendarstellung und Codierung 2-21 2. Zahlendarstellung und Codierung 2-22

Das IEEE-Gleitkommaformat (IEEE 754) Genauigkeit Vorzeichen (bits) Exponent (bits) Fraction (= Mantisse ohne hidden bit) (bits) Gesamtbreite (bits) Excess Exponent 8 32 127 1 (0 = positiv, 1 = negativ) 23 (hidden bit) -126... +127 52 (hidden bit) 1023-1022... +1023 Spezielle Werte (hier für einfache Genauigkeit): Exponent e -127 (0...0 2 ) -127 (0...0 2 ) -126 e 127 Single Fraction f 0...0 2 0...0 2 f Double 11 64 Bedeutung ± 0 0,... * 2-128 (denormale Zahlen) 1,f * 2 e 2.1.4 Zeichen (characters) Darstellung in fester Länge Die Zuordnung von Bitmustern zu den darzustellenden Zeichen nennt man einen Zeichencode. Zur Darstellung von Zeichen des Alphabets (Textzeichen, Sonderzeichen) gibt es internationale Standards. Diese verwendet eine feste Anzahl von Bits für jedes Zeichen. ASCII EBCDIC American Standard Code for Information Interchange. Ursprünglich ein 7-Bit- Code, inzwischen als 8-Bit-Code gebräuchlich, damit auch internationale Zeichen (z. B. deutsche Umlaute) aufgenommen werden können (IA5 = International Alphabet Number 5). Extended Binary Coded Decimal Interchange Code. Ein 8-Bit-Code, der auf Großrechnern sehr weit verbreitet ist, vor allem bei IBM -128 (1...1 2 ) -128 (1...1 2 ) 0...0 2 0...0 2 ± NaN (not a number) 2. Zahlendarstellung und Codierung 2-23 2. Zahlendarstellung und Codierung 2-24

Darstellung von Zeichen (1) ASCII-Codetabelle (7-Bit-Code) Beide Codes enthalten druckbare Zeichen Ziffern Kleinbuchstaben Großbuchstaben Sonderzeichen (!,?, $,...) nicht druckbare Zeichen (Steuerzeichen) Wagenrücklauf, Zeilenvorschub, Tabulator, Klingeln, etc. Gerätesteuerzeichen und Übertragungssteuerzeichen. y Erste 3 Bits x 0 1 2 3 4 5 6 7 0 nul dle 0 @ P ` p 1 soh dc1! 1 A Q ` q 2 sfx dc2 " 2 B R b r 3 etx dc3 # 3 C S c s 4 eot dc4 $ 4 D T d t 5 enq nak % 5 E U e u 6 ack syn & 6 F V f v 7 bel etb ' 7 G W g w 8 bs can ( 8 H X h x 9 ht em ) 9 I Y i y A lf sub * : J Z j z B vt esc + ; K [ k { C ff fs, < L \ l D cr qs - = M ] m } E so rs. > N ^ n F si us /? O _ o del 2. Zahlendarstellung und Codierung 2-25 2. Zahlendarstellung und Codierung 2-26

ASCII: Bedeutung der Steuerzeichen EBCDIC-Codetabelle Abk. Funktion Funktion (Bedeutung des Zeichens) NUL SOH STX ETX EOT ENQ ACK BEL BS HT LF VT FF CR SO SI DLE DC1-3 DC4 NAK SYN ETB CAN EM SS ESC FS GS RS US SP DEL Null Start of heading Start of text End of text End of transmission Enquiry Acknowledgement Audible signal Backspace Horizontal tabulation Line fe ed Vertical tabulation Form feed Carrier return Shift out S hift in Data link escape Device control Device stop Negative acknowledgement Synchronous idle End of transmission block Cancel End of medium Start of special sequence Escape File separator Group separator Record s epara tor Unit s epa rator Space Delete/Idle Nichtiges (ungültiges) Zeichen Beginn des Kopfes (Titels) Textanfang Textende Ende der Übertragung Anfra ge Empfangsbestätigung Akustisches Signal Rücksetzen Horizontale Einstellung (Tabulator) Zeilenvorschub Vertikale Einstellung (Tabulator) Formularvorschub Schreibkopfrücklauf Umschaltung aus (Kleinschreibung) Umschaltung ein (Großschreibung) Umschaltung von Text auf Steuerzeichen Einheitensteuerung Einheitenhalt Negative Empfangsbestätigung Synchronisierzeichen (Leerlauf) Ende eines Übertragungsblockes Aufhe bung Ende für ein Medium (Gerät) Beginn einer speziellen Folge Auswahl, Trennung, Umschaltung Dateitre nnzeichen Gruppentrennzeichen Satztrennzeiche n Trennzeichen für eine Informationseinheit Zwischenra um Lös che n/ Le e rlauf 2. Zahlendarstellung und Codierung 2-27 2. Zahlendarstellung und Codierung 2-28

Zeichencodes mit variabler Bitlänge Zeichencodes mit einer festen Anzahl von Bits haben den gravierenden Nachteil, dass sie nicht optimal sind, wenn die Häufigkeit der Zeichen in einem Text nicht gleich verteilt ist. Man kann sich dann Codes überlegen, bei denen Zeichen je nach ihrer Häufigkeit mit einer unterschiedlichen Anzahl von Bits dargestellt werden. Die Codetabelle wird gemäß den Zeichenhäufigkeiten anwendungsabhängig gewählt Vorteil Im Mittel weniger Bits zur Darstellung der Anwendungsdaten. Verringert den Speicherbedarf und beschleunigt den Datentransfer. Nachteil Zusatzaufwand zum Kodieren/Dekodieren zwischen gebräuchlichen Darstellungen und dem Code mit variabler Bitlänge. Parsing (Zerlegung der Zeichenkette in die einzelnen Zeichen) wird komplizierter. Beispiel für einen Code mit variabler Bitlänge (1) Zeichen Häufig- Code Anzahl keit (%) der Bits 0 55.5 0 1 1 6.7 1000 4 2 4.5 1100 4 8 3.5 10010 5 3 3.3 10100 5 A 3.2 10101 5 5 3.0 10110 5 6 2.7 11100 5 4 2.7 11101 5 9 2.2 11110 5 7 1.9 100110 6 F 1.5 101110 6 B 1.2 111110 6 [leer] 1.1 110110 6 D 1.0 110100 6 E 0.9 110101 6 Z 0.7 1011110 7 P 0.6 1111110 7 N 0.5 1101110 7 u 0.4 10011110 8 C 0.4 10011100 8 2. Zahlendarstellung und Codierung 2-29 2. Zahlendarstellung und Codierung 2-30

Beispiel für einen Code mit variabler Bitlänge (2) Beispiel für einen Code mit variabler Bitlänge (3) H 0.4 10011101 8 R 0.3 10111110 8 M 0.3 11111110 8 L 0.3 11111111 8 S 0.25 11011110 8 I 0.20 100111110 9 T 0.15 110111110 9 K 0.15 110111111 9 Y 0.13 1001111110 10 X 0.12 1001111111 10 G 0.10 1011111100 10 J 0.10 1011111101 10 O 0.06 10111111100 11 Q 0.03 10111111101 11 V 0.03 10111111110 11 W 0.03 101111111110 12. 0.01 1011111111110000 16-1011111111110001 16? 1011111111110010 16 & 1011111111110011 16 / 1011111111110100 16 + 1011111111110101 16 < unter 1011111111110110 16 ) 0.001 1011111111110111 16 ( 1011111111111000 16 % 1011111111111001 16 = 1011111111111010 16 # 1011111111111011 16? 1011111111111100 16, 1011111111111101 16 @ 1011111111111110 16 1011111111111111 16 Mittlere Zeichenlänge im Code 0.555 * 1 + 0.112 * 4 + 0.206 * 5 + 0.76 * 6 + 0.018 * 7 + 0.24 * 8 + 0.005 * 9 + 0.0045 * 10 + 0.0017 * 11 + 0.0003 * 12 + 0.0001 x 16 = 2.91 Bits pro Zeichen Wesentlich weniger als die üblichen 8 Bits pro Zeichen! 2. Zahlendarstellung und Codierung 2-31 2. Zahlendarstellung und Codierung 2-32

Der Huffman-Code Huffman-Code: Beispiel David Huffman hat einen Algorithmus zur Konstruktion von optimalen Codes mit variabler Bitlänge angegeben. Mit diesem Algorithmus konstruierte Codes bezeichnet man als Huffman-Codes. Wahrscheinlichkeiten der Zeichen: p(a) = 0.3; p(b) = 0.3; p(c) = 0.1; p(d) = 0.15; p(e) = 0.15 Algorithmus Erzeuge-Huffman-Code Kodierbaum Wahrscheinlichkeit Zeichen Code 1. Bestimme die Auftrittshäufigkeiten der Zeichen und schreibe sie an die Blattknoten eines aufzubauenden Binärbaums an. 2. Nimm die bisher unerledigten zwei Knoten mit den geringsten Häufigkeiten und berechne deren Summe. 3. Erzeuge einen Elternknoten für diese beiden und beschrifte ihn mit der Summe. Markiere die Verzweigung zum linken Sohn mit 0, die zum rechten Sohn mit 1. 4. Markiere die beiden bearbeiteten Knoten als erledigt. Wenn es nur noch einen nicht erledigten Knoten gibt, sind wir fertig. Sonst weiter mit Schritt 2. 1 100 0 1 40 0 1 60 0 1 25 0 30% 30% 10% 15% 15% A B C D E 11 10 011 010 00 2. Zahlendarstellung und Codierung 2-33 2. Zahlendarstellung und Codierung 2-34

Huffman-Code: Optimalität Beweisidee Die Zeichen mit großen Häufigkeiten sind näher an der Wurzel des Baumes und haben somit eine kürzere Codewortlänge; deshalb ist es ein guter Code. Es ist sogar der bestmögliche Code! Denn: Die Länge einer kodierten Zeichenfolge ist gleich der gewichteten äußeren Pfadlänge des Huffman-Baumes. Die gewichtete äußere Pfadlänge eines Baumes ist gleich der über alle äußeren Knoten gebildeten Summe der Produkte des Gewichts (zugehöriger Häufigkeitszähler) mit der Entfernung von der Wurzel. Dies ist offensichtlich eine Möglichkeit, die Länge der kodierten Zeichenfolge zu berechnen; sie ist äquivalent zu der über alle Buchstaben gebildeten Summe der Produkte der Häufigkeit des Auftretens eines Buchstaben mit der Anzahl der Bits bei jedem Auftreten. Mit Hilfe des gleichen Prozesses kann ein beliebiger anderer Binärbaum konstruiert werden, doch ohne bei jedem Schritt unbedingt die zwei Knoten mit dem kleinsten Gewicht auszuwählen. Mittels Induktion lässt sich beweisen, dass keine Strategie zu einem besseren Ergebnis führen kann als die, bei der jeweils zuerst die beiden kleinsten Gewichte ausgewählt werden. Kein Baum mit den gleichen Häufigkeiten bei den äußeren Knoten hat eine kleinere gewichtete äußere Pfadlänge als der Huffman-Baum. 2. Zahlendarstellung und Codierung 2-35 2. Zahlendarstellung und Codierung 2-36

Dekodieren von Huffman-Codes (1) Decodieren von Huffman-Codes (2) Nahe liegend ist eine Dekodierung unter Verwendung des Tries (eines speziellen Binärbaumes): Als Alternative bietet sich die Verwendung einer Dekodiertabelle an. 1. Lies den Eingabestrom sequenziell und traversiere den Trie, bis ein Blattknoten erreicht ist. 2. Gib bei Erreichen des Blattknotens das erkannte Zeichen aus. Beobachtung Die Eingabe-Bitrate ist konstant, aber die Ausgabe- Zeichenrate ist variabel! Erzeugung der Tabelle Hat das längste Codewort L Bits, so hat die Tabelle 2 L Einträge. Sei c i das Codewort für Zeichen s i. c i habe l i Bits. Wir erzeugen 2 L-li Einträge in der Tabelle, bei denen jeweils die ersten l i Bits = c i sind und die verbleibenden L-l i Bits alle möglichen Kombinationen annehmen. An all diesen Adressen wird s i als erkanntes Zeichen eingetragen, zugleich wird l i als Codewortlänge vermerkt. 2. Zahlendarstellung und Codierung 2-37 2. Zahlendarstellung und Codierung 2-38

Decodieren von Huffman-Codes (3) Huffman-Code: Kommentare Einsatz der Tabelle zur Dekodierung 1. Lies L Bits aus dem Eingabestrom in einen Puffer. 2. Benutze den Puffer als Adresse in der Tabelle und gib das erkannte Zeichen s i aus. 3. Entferne die ersten l i Bits aus dem Puffer und ziehe weitere l i Bits aus dem Eingabestrom nach. 4. Weiter mit Schritt 2. Beobachtung Das Tabellenverfahren ist schnell. Die Ausgabe-Zeichenrate ist konstant, aber die Eingabe-Bitrate ist variabel! Ein sehr guter Code für viele praktische Zwecke. Allerdings nur geeignet, wenn die Häufigkeiten der Zeichen a priori bekannt und immer gleich (oder ähnlich) sind. Variante: Ermittle die Häufigkeiten für jeden gegebenen Text neu und speichere/übertrage den Code mit den Daten. Ein (durchaus berechenbarer) Verlust entsteht dadurch, dass jedes Zeichen mit einer ganzen Zahl von Bits kodiert werden muss und somit die Codelänge den Häufigkeiten nicht ganz (theoretisch optimal) angepasst werden kann. Verbesserung: arithmetische Kodierung (auf die wir hier nicht näher eingehen). 2. Zahlendarstellung und Codierung 2-39 2. Zahlendarstellung und Codierung 2-40

2.2 Fehlererkennende Codes (wird noch ergänzt) 2.3 Fehlerkorrigierende Codes (wird noch ergänzt) 2. Zahlendarstellung und Codierung 2-41 2. Zahlendarstellung und Codierung 2-42