Informatik II Kodierung Kodierung Rainer Schrader Zentrum für Angewandte Informatik Köln 24. Oktober 2008 1/1 2/1 Kodierung Kodierung Ein Alphabet Kodierung hat mehrere Bedeutungen: Σ ist eine endliche Menge. Beispiele: • (das Erstellen von Programmcode) • die Darstellung von Zeichen und Zahlen im Rechner • die Transformierung von Zeichenketten einer Sprache in eine andere 3/1 Σ1 = {0, 1, 2 . . . 9}, Σ2 = {A, . . . , Z }, Σ3 = {0, 1} Σ4 = {0, . . . , 9, A, . . . , Z , a, . . . , z , +, −, /, ?, !} 4/1 Kodierung Kodierung • übliche Alphabete: Sei Σ ein Alphabet und i ∈ N. • Σ = {0, 1} • Σ = {0, . . . , 9, A, . . . , F } (i) Σi := {a1 a2 . . . ai : aj ∈ Σ, 1 ≤ j ≤ i } ist die Menge der Wörter der Länge i über Σ. • wir lassen im Folgenden auch allgemeinere Alphabete zu (ii) ∅ bezeichnet das leere Wort (iii) Σ∗ := S 0≤i <∞ • wir fassen die zu kodierenden Objekte in drei Gruppen zusammen: Σi ist die Menge der endlichen Wörter über Σ. (iv) Sei M eine Menge, f : M → Σ∗ eine bijektive Abbildung. Dann heißt f Kodierung von M. (i) Text (ii) ganze Zahlen mit oder ohne Vorzeichen (iii) reelle Zahlen 5/1 6/1 Kodierung Kodierung Ein Bit (binary digit) Gliederung • ist die kleinstmögliche Informationseinheit • die Informationsmenge der Antwort auf eine Frage, die zwei Antworten • Bits, Bytes, Dateien • Darstellung von Texten zulässt: • Darstellung ganzer Zahlen • Darstellung von Dezimalzahlen • ja oder nein • Fehlertoleranz • schwarz oder weiß . • .. • wahr oder falsch 7/1 8/1 Kodierung Kodierung • durch Folgen von Bits kann man offensichtlich mehr Antworten kodieren: • Kodierung der Antwort durch einen Code mit zwei Zeichen • Beispiele: • 0 oder 1 • 2 Bits: 00, 01, 10, 11 • in elektronischen Datenverarbeitungsanlagen • 0 ←→ 0 Volt 4 = 22 mögliche Bitfolgen/Antworten 1 ←→ 5 Volt • 3 Bits: 000, 001, 010, 011, 100, 101, 110, 111 • auf Festplatten • 0 ←→ unmagnetisiert 8 = 23 mögliche Bitfolgen/Antworten 1 ←→ magnetisiert • n Bits: 2n mögliche Bitfolgen/Antworten 9/1 10 / 1 Kodierung Kodierung Bezeichnungen von Bitfolgen fester Länge n: Eine Datei ist eine beliebig lange (aber endliche) Folge von Bytes, die Informationen repräsentiert wie n=1 Bit n=4 Halbbyte n=8 Byte n = 16 Halbwort Diese Begriffe n = 32 Wort werden nicht • Musikstücke • Bilder n = 64 Doppelwort einheitlich verwendet • Videos . . . • Texte • Zahlen 11 / 1 12 / 1 Kodierung Kodierung • die Größe einer Datei ist die Anzahl ihrer Bytes • analog zu Gewichtsmaßen definieren wir • üblicherweise enthalten Dateinamen eine Erweiterung, die festlegt, wie die Bytefolge zu interpretieren ist, z.B. • name.txt, name.doc für unformatierten Text • name.tex, für formatierten Text • name.wav, name.mp3 für Musik • name.tiff, name.jpeg für Bilder • name.avi, name.mp4 für Videos 1 Kilobyte = 1024 = 210 Bytes 1 Megabyte = 10242 = 220 Bytes 1 Gigabyte = 10243 = 230 Bytes 1 Terabyte = 10244 = 240 Bytes 1 Petabyte = 10245 = 250 Bytes 1 Exabyte = 10246 = 260 Bytes • in UNIX ist es üblich, den Typ der Datei in den ersten Inhaltsbytes zu kennzeichnen • Vorsicht: Hersteller verwenden oft „Giga” für 109 statt 230 • dann enthält eine 500-Gigabyte-Festplatte tatsächlich nur 465 Gigabyte Speicherplatz [ 500 × 109 ≈ 465 × 230 ] 14 / 1 13 / 1 Kodierung Kodierung Alphanumerische Codes Gliederung Kodierung der Zeichen der Tastatur über {0, 1}, d.h.: • Bits, Bytes, Dateien • Darstellung von Texten • 52 Groß- und Kleinbuchstaben • Darstellung ganzer Zahlen • Darstellung von Dezimalzahlen • arithmetische Symbole, Sonderzeichen • 10 Ziffern • Steuerzeichen (Zeilenvorschub, Tabulator, Backspace,…) • Fehlertoleranz • es reichen 7 Binärziffern (= 27 = 128 Möglichkeiten) 15 / 1 16 / 1 Kodierung Kodierung 7-Bit ASCII Code (American Standard Code for Information Interchange) gebräuchliche Codes: Bits 3210/7654 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 • ASCII: American Standard Code for Information Interchange • z.B. Zeichen A B Z CR ASCII 0100001 0100010 0101110 0001101 Zeichen a b z ? ASCII 01100001 01100010 01111110 00111111 • benutzt 7 Bits = 7 Binärzeichen • üblicherweise durch eine führende Null zu 8 Bits ergänzt P000 NULL SOM EOA EOM EOT WRU RU BELL FE HT/SK LF V/TAB FF CR SO SI P001 DC0 DC1 DC2 DC3 DC4 ERR SYNC LEM S0 S1 S2 S3 S4 S5 S6 S7 P010 ! ” # $ % & ’ ( ) * + , . / P011 0 1 2 3 4 5 6 7 8 9 : ; < = > ? P100 @ A B C D E F G H I J K L M N O P101 P Q R S T U V W X Y Z [ \ ] ↑ ← P110 ‘ a b c d e f g h i j k l m n o P111 p q r s t u v w x y z ACK UC ESC DEL 17 / 1 18 / 1 Kodierung Kodierung (2) für Erweiterungen • verwende die Bytes 1000 0000 bis 1111 1111 für Sonderzeichen wie Umlaute, Akzente, griechische Buchstaben, andere Schriften, graphische Zeichen, … • die 2 = 128 ASCII-Zeichen entsprechen den Bytes 0000 0000 für 7 ASCII 0 bis 0111 1111 für ASCII 127 • die ISO (International Organization for Standardization) hat • damit ist das erste Bit immer 0 und kann zusätzlich genutzt werden: verschiedene ASCII-Erweiterungen normiert • darunter die ASCII-Erweiterung Latin-1 für europäische Bedürfnisse • Kodierung und Dekodierung mittels verschiedener ASCII-Erweiterungen (1) Paritätsbit • setze es stets so, dass das Byte immer eine ungerade Anzahl von erzeugt Kuddelmuddel Einsen enthält • (Umlaute werden durch merkwürdige Zeichen ersetzt) • UNIX ignoriert das erste Bit • damit kann es zur Fehlererkennung benutzt werden • es gibt ein Programmpaar uuencode/uudecode zur Konvertierung in 7-Bit-ASCII und zurück. (Gewisse Email-Programme machen das automatisch.) 19 / 1 20 / 1 Kodierung Kodierung UTF-8 Unicode (universal character set) • ein Standard, der versucht, das ASCII-Erweiterungschaos zu • eine kompakte Kodierung, • ist kompatibel mit der historischen 7-Bit-ASCII-Kodierung • fasst die relevanten Zeichen der verschiedenen Kulturkreise im • trägt den UCS-Erweiterungen Rechnung: Norm ISO-10646 Anhang R • UTF steht für „UCS Transformation Format“ überwinden universellen 16-Bit-Code UCS-2 zusammen • UTF-8 hat variable Kodierungslängen • UCS-2 ist international standardisiert unter der Norm ISO-10646 • ebenso wurde eine 31-Bit-Version (UCS-4) festgelegt • 1 Byte für 7-Bit-ASCII-Zeichen • 2–6 Bytes für andere Zeichen 21 / 1 22 / 1 Kodierung Kodierung UTF-8 Schema • 1-Byte Codes haben die Form 0xxx xxxx für 7-Bit-ASCII. • 2-Byte Codes haben die Form 110x xxxx, 10xx xxxx für 11-Bit UCS-2. weitere Codes: (vorwiegend auf Großrechnern) • 3-Byte Codes haben die Form • BCD • EBCDIC 1110 xxxx, 10xx xxxx, 10xx xxxx für 16-Bit UCS-2. • 4-Byte Codes haben die Form 1111 0xxx, 10xx xxxx, 10xx xxxx, 10xx xxxx für 21-Bit UCS-2. • ANSI • 5-Byte Codes haben die Form 1111 10xx, 10xx xxxx, 10xx xxxx, 10xx xxxx, 10xx xxxx für 26-Bit UCS-2. • 6-Byte Codes haben die Form 1111 110x, 10xx xxxx, 10xx xxxx, 10xx xxxx, 10xx xxxx, 10xx xxxx für 31-Bit UCS-2 • d.h. für 7-Bit-ASCII erhöht sich die Dateilänge nicht • erlaubt, bei einem Übertragungsfehler leicht wieder aufzusetzen. 23 / 1 24 / 1 Kodierung Kodierung Gliederung Kodierung von Zeichenketten • Bits, Bytes, Dateien • Darstellung von Texten • Zeichenketten (strings) werden kodiert, indem man die Codes der Zeichen aneinander fügt • Darstellung ganzer Zahlen • z.B. (7-Bit-ASCII mit Paritätsbit) für „INFORMATIK II“: • natürliche Zahlen (inkl.der Null) 0100 1001 1100 1110 0100 0110 0100 1111 0101 0010 1100 1101 1100 0001 0101 0100 0100 1001 1100 1011 0010 0000 0100 1001 0100 1001 • ganze Zahlen • Darstellung von Dezimalzahlen • Fehlertoleranz 25 / 1 26 / 1 Kodierung Kodierung • sei b > 1 eine natürliche Zahl (Basis) • und z0 , z1 , . . . , zb−1 b Zahlzeichen (Ziffern) Satz [b-adische Darstellung] Sei b ∈ N mit b ≥ 2. • die Zahlzeichen entsprechen den natürlichen Zahlen: (i) Jede natürliche Zahl a > 0 lässt sich eindeutig darstellen in der Form z0 ≡ 0, z1 ≡ 1, z2 ≡ 2, . . . zb−1 ≡ b − 1. a= r X ak b k mit ak ∈ {0, . . . , b − 1}, ar 6= 0 k =0 (ii) Jede natürliche Zahl a kann so mit O(logb a) Ziffern kodiert werden. Darstellung natürlicher Zahlen: Satz [b-adische Darstellung] Beweis: Sei b ∈ N mit b ≥ 2. (i) Jede natürliche Zahl a > 0 lässt sich eindeutig darstellen in der Form a= r X ak b k mit ak ∈ {0, . . . , b − 1}, ar 6= 0 ˝ a= k =0 (ii) Jede natürliche Zahl a kann so mit ¨ • (i) Existenz: Setze ak = bak mod b, • denn rechnet man leicht nach, dass: r X ak b k . k =0 O(logb a) Ziffern kodiert werden. 27 / 1 28 / 1 Kodierung Kodierung (ii) Eindeutigkeit: • angenommen a habe zwei Darstellungen • d.h. nach eventuellem Auffüllen mit 0-Koeffizienten gilt: a= r X ak b k = k =0 Pr • somit: • und: k =0 (ak r X k =0 Beispiele für Zahlensysteme Zahlensystem Dezimalsystem Dualsystem Oktalsystem Hexadezimalsystem ak0 b k mit ak , ak0 ∈ {0, . . . , b − 1}. − ak0 )b k = 0 mit − b < ak − ak0 < b a0 − a00 b + r X k =1 Basis b 10 2 8 16 Ziffern 0, 1, 2, . . ., 9 0, 1 0, 1, 2, . . ., 7 0, 1, 2, . . ., 9, A, . . ., F (ak − ak0 )b k −1 = 0 {z | Historisch: } a∗ • b = 12 („Dutzend“, „Gros“) • b = 20 („quatre-vingt“) • b = 60 (Zeitrechnung, Schock) 0 0 • da a∗ ∈ N, folgt a0 −a ∈N b 0 • da −b < a0 − a0 < b, folgt a0 − a00 = 0 • Anwendung des Arguments auf a∗ ergibt ak = ak0 (k = 0, . . . , r ) 29 / 1 30 / 1 Kodierung Kodierung Beispiel angewandt auf a = 5013410 und b = 10 liefert das des obigen Verfahrens: Beispiele: 100112 1B516 1 · 24 16 1910 = = = = = = 1 · 16 256 43710 2 + + + 0 · 23 11 · 16 176 + 1 0 · 22 + Sprechweise: (ar , . . . , a0 )b ist die Darstellung der Zahl + + 5 · 16 5 1 · 21 2 + + 1 · 20 1 0 a0 = a1 = .. . a b c mod 10 = 4 1 a b c = (5013) mod 10 = 3 10 Korollar Insbesondere lässt sich jede natürliche Zahl n eindeutig in der Form P ak b k zur Basis b. n= r X zi 2i i =0 mit zi ∈ Σ2 = {0, 1} darstellen. 31 / 1 2 32 / 1 Kodierung Kodierung Konvertierungsregeln Beispiel: binäre Darstellung von 153710 n b n2 c n mod 2 1537 768 384 192 96 48 24 12 6 3 1 768 384 192 96 48 24 12 6 3 1 0 1 0 0 0 0 0 0 0 0 1 1 Wie lassen sich natürliche Zahlen vom b-adischen System in das Dezimalsystem umrechnen und umgekehrt? P • dezimal −→ b-adisch: a→ ak b k j a k ak = mod b bk • b-adisch −→ dezimal: (ar , ar −1 , . . . , a0 )b → a: a= r X ai b i i =0 eventuell unter Verwendung des Hornerschemas: a = a0 + b(a1 + b(a2 + . . . + b(ar −1 + bar )) . . .) d.h. 153710 = (11000000001)2 34 / 1 33 / 1 Kodierung Kodierung Umwandlungen zwischen Zahlensystemen: • z.B.: 43710 → ?16 437 27 1 : : : 16 16 16 = = = 27 1 0 Rest 5 Rest 11 Rest 1 Arithmetische Operationen • ähnlich wie im Dezimalsystem • z.B. Addition im Binärsystem • also 43710 = 1B516 • besonders einfach: dual ↔ hexadezimal 1110 E 0110 6 1011 B dezimal 12 77 89 0101 5 35 / 1 binär 1100 1001101 1011001 36 / 1 Kodierung Kodierung • teile auf in Vorzeichen und Betrag Gliederung • erstes Bit für das Vorzeichen, restliche Bits wie gehabt: • Bits, Bytes, Dateien • Darstellung von Texten • „0“ für „+“ • „1“ für „−“ • Darstellung ganzer Zahlen • natürliche Zahlen (inkl. der Null • z.B.: (8 Bit Wörter) • ganze Zahlen 5 : 00000101 −5 : 10000101 • darstellbarer Bereich bei Wortlänge n: • Darstellung von Dezimalzahlen • Fehlertoleranz • n = 8 : [−127, +127] • allgemein: [−2n−1 + 1, 2n−1 − 1] 38 / 1 37 / 1 Kodierung Kodierung Nachteile • es gibt keine eindeutige Null (+0, −0) • das Rechenwerk braucht ein Addierwerk und ein Subtrahierwerk, sowie Abhilfe: Rückführung der Subtraktion auf die Addition • z.B. Addition zweier Zahlen x und y in dieser Darstellung: Idee: Komplementdarstellungen eine Logik, die entscheidet, ob addiert oder subtrahiert werden muss Vorzeichen von x + − + Vorzeichen von y + − − − + x x x x ≥y <y ≥y <y Operation auf den Beträgen Add x + y Add x + y Subtr x − y Subtr y − x Subtr x − y Subtr y − x • für z > 0 Darstellung von −z durch z = C − z für geeignetes C • dann gilt: Vorzeichen des Ergebnisses + − + − − + x − y = x + (C − y ) − C = x + y − C • d.h. Subtraktion durch Addition des Komplements • und anschließender Subtraktion von C (und die muss einfach sein!) 39 / 1 40 / 1 Kodierung Kodierung (b − 1)-Komplement • sei b die Basis, n die Wortlänge • wähle C = b n − 1 P i • Komplementbildung von x = n−1 i =0 xi b : Beispiele: (4 Stellen) • Dezimalsystem: 4711 = 5288 Null: 0000, 9999 • Dualsystem 0101 = 1010 (erstes Bit: Vorzeichen) Null: 0000, 1111 x =C −x = (b n − 1) − n−1 X xi b i Zahlenbereich: [−(b n−1 − 1), (b n−1 − 1)] i =0 = n−1 X b i +1 − i =0 = n−1 X bi − i =0 n−1 X xi b i i =0 n−1 X ((b − 1) − xi )b i i =0 • d.h. Komplementbildung durch stellenweises Komplementieren 41 / 1 42 / 1 Kodierung Kodierung (b − 1)-Komplement: Veranschaulichung am Zahlenring −7=1000 (b − 1)-Komplement: Subtraktion von C 7=0111 • sei z = x − y = x + y − C • Fall 1: x > y (⇒ z > 0) 6=0110 −6=1001 5=0101 −5=1010 x +y = −4=1011 4=0100 −3=1100 x + (b n − 1 − y ) = x − y −1 + b n | {z } 3=0011 ⇒ −2=1101 x + (C − y ) = 0<z <b n n b ≤ x + y < 2b n 2=0010 −1=1110 • d.h. Überlauf von 1 in die nicht existierende (n + 1)-te Stelle • ignorieren des Überlaufs entspricht Subtraktion von b n 1=0001 −0=1111 0=0000 • ignorieren und Addition von 1 entspricht Subtraktion von C = b n − 1 43 / 1 44 / 1 Kodierung Kodierung (b − 1)-Komplement: Beispiele • Dezimalsystem (n = 2) 65 + 56 121 → 1 22 65 − 43 22 (b − 1)-Komplement: Beispiele • Dualsystem (n = 5) • Dualsystem (n = 5) 01110 + 11000 100110 −→ 1 00111 14 − 7 7 01110 + 11111 101101 −→ 1 01110 14 − 0 14 „Einserrücklauf“ die „negative Null“ stört nicht (= b 00111) 46 / 1 45 / 1 Kodierung Kodierung b-Komplement • sei b die Basis, n die Wortlänge und C = b n P i • Komplementbildung von x = n−1 i =0 xi b : (b − 1)-Komplement: Subtraktion von C • Fall 2: x ≤ y (⇒ z ≤ 0) • z ist in Komplementdarstellung erwünscht: C − |z | • z = −|z | = x + y − C ⇒ x + y = C − |z | ≤ C = b n − 1 x = = = 2 00101 + 11000 11101 xi b i (b n − 1) − n−1 X xi b i + 1 i =0 • Beispiel: 5 + 2 7 n−1 X i =0 • richtige Darstellung: kein Überlauf, kein Einserrücklauf 5 − 7 − 2 C − x = bn − = n−1 X b i +1 − i =0 = 00010 = n−1 X i =0 bi − n−1 X xi b i + 1 i =0 n−1 X ((b − 1) − xi )b i + 1 i =0 • d.h. Stellenkomplement bilden, Eins aufaddieren (kaum schwieriger) • nur eine Null 47 / 1 • Zahlenbereich: [−b n−1 , (b n−1 − 1)] 48 / 1 Kodierung Kodierung b-Komplement: Veranschaulichung am Zahlenring −8=1000 7=0111 −7=1001 6=0110 −6=1010 Beispiel: 4 Stellen 5=0101 −5=1011 • Dezimalsystem 4711 = 5289 • Dualsystem 0101 = 1011 (erstes Bit: Vorzeichen) 4=0100 −4=1100 3=0011 −3=1101 −2=1110 2=0010 1=0001 −1=1111 0=0000 49 / 1 50 / 1 Kodierung b-Komplement: Subtraktion von C Kodierung • einfach: C = b n , d.h. Überlauf in (n + 1)-ter Stelle ignorieren (kein Einserrücklauf) • Überschreiten des zulässigen Zahlenbereichs • z.B. b-Komplement, n = 4 • Beispiele: • Dezimalsystem (n = 2) 65 + 57 122 ↓ 22 65 − 43 22 • Dualsystem (n = 5) 14 − 7 7 01110 + 11001 100111 ↓ 00111 5 − 7 − 2 00101 + 11001 11110 6 + 3 9 0110 + 0011 1001 = b −7 − 5 − 4 − 9 1011 + 1100 10111 = b7 • Übungsaufgabe: Analysieren Sie alle Fälle, in denen arithmetische (= 00010) 51 / 1 Überläufe auftreten können, und schlagen Sie vor, wie man solche entdecken kann 52 / 1 Kodierung Kodierung Exkurs: Blaise Pascal (1623–1662) Pascaline (1645) • eigentlich konnte die Maschine nur addieren • Subtraktion wurde mit Hilfe des Neunerkomplements realisiert 53 / 1 54 / 1 Kodierung Kodierung • Multiplikation x · y im b-Komplement • x > 0, y > 0, z.B.: (n = 10) 13 * 21 13 26 273 • Multiplikation x · y im b-Komplement • x > 0, y < 0, Darstellung des Ergebnisses im b-Komplement 0000001101 * 0000010101 1101 0 1101 0 1101 0100010001 x ∗ y = bn − x ∗ y = b n − b n ∗ x + x ∗ (b n − y ) = bn − bn ∗ x + x ∗ y = x ∗ y − b n ∗ (x − 1) • d.h. ignoriere die oberen n Stellen 55 / 1 56 / 1 Kodierung Kodierung • Multiplikation x · y im b-Komplement • x < 0, y < 0: • Multiplikation x · y im b-Komplement • x > 0, y < 0: x ∗ y = x ∗ y − b n ∗ (x − 1) Ergebnis } } x ∗ y = (2n − x ) ∗ (2n − y ) n Stellen = 22n − 2n ∗ x − 2n ∗ y + x ∗ y = 2n ∗ (2n − x − y ) +x ∗ y | {z } n Stellen ≥2n z.B. (n = 5): (−3) ∗ (−2) = 6 ignorieren 11101 * 11110 ———————————– 0 11101 11101 11101 11101 ————————————— 1101100110 = 6 • z.B. b = 2 und n = 5: 3 ∗ (−2) = −6 00011 * 11110 ———————————– 0 11 11 11 11 ————————————— 0001011010 = -6 57 / 1 58 / 1 Kodierung Kodierung • ganzzahlige Division x /y (x > 0, y > 0) • z.B.: 425 / 18 = 23 Rest 11 Excess-2n−1 -Darstellung • repräsentiere x als x + 2n−1 • z.B. n = 8: Excess-128 −3 : −3 + 128 = 125 = 011111012 110101001 : 10010 = 10111 10010 100010 ganzzahliger Quotient 10010 100000 10010 11101 10010 1011 Rest • Zahlenbereich: [−128, 127] ↓ [0, 255] • wie 2-Komplement, linkes Bit anders herum • Vergleiche x ≤ y leichter • negative Operanden → Umweg über positive • Divisor = 0 → Fehlermeldung „ZERO DIVIDE“ • auch: Excess-A-Darstellung für A 6= 2n−1 z.B. A = 2n−1 − 1 59 / 1 60 / 1 Kodierung Kodierung Excess-23 -Darstellung am Zahlenring 0=1000 −1=0111 1=1001 −2=0110 Gliederung 2=1010 • Bits, Bytes, Dateien • Darstellung von Texten −3=0101 3=1011 • Darstellung ganzer Zahlen −4=0100 • Darstellung von Dezimalzahlen 4=1100 −5=0011 • Festkommazahlen • Gleitkommazahlen −6=0010 5=1101 • Fehlertoleranz −7=0001 6=1110 −8=0000 7=1111 61 / 1 Kodierung 62 / 1 Kodierung vom Dezimalsystem ins Dualsystem: (19.359375)10 Darstellung reeller Zahlen = 19 + 0.359375 = (10011)2 + ... Sei b ∈ N mit b ≥ 2 und a ∈ R. Dann ist a=± r X Der „Rest-Bruch“ wird nun solange umgerechnet, bis er „verschwindet“. (Ausnahme: periodische Zahlen, s.u.) ak b k , ak ∈ {0, . . . , b − 1}, ar 6= 0. k =−∞ 0.359375 = 0.71825 · 2−1 = 1.4375 · 2−2 Beispiel = 1 · 2−2 + 0.4375 · 2−2 vom Dualsystem ins Dezimalsystem: = 1 · 2−2 + 0.875 · 2−3 (101.1101)2 = = = = 1 · 2−2 + 1.75 · 2−4 1 · 22 + 1 · 20 + 1 · 2−1 + 1 · 2−2 + 1 · 2−4 1 1 1 4+1+ + + 2 4 16 5.8125 = 1 · 2−2 + 1 · 2−4 + 0.75 · 2−4 = 1 · 2−2 + 1 · 2−4 + 1.5 · 2−5 = 1 · 2−2 + 1 · 2−4 + 1 · 2−5 + 0.5 · 2−5 = 1 · 2−2 + 1 · 2−4 + 1 · 2−5 + 1 · 2−6 (19.359375)10 = (10011.010111)2 63 / 1 64 / 1 Kodierung Kodierung • “gedachtes Komma” irgendwo an fester Stelle Der obige Umwandlungsalgorithmus terminiert nicht in jedem Fall: • integer: ganz rechts Beispiel: • oder z.B. bei Geld 2-te Stelle von rechts: • (0.1)3 = (0.33 · · · )10 • (0.24)10 = (· · · )2 als Übungsaufgabe | x5 x4 x3 {z x2 x1 n=6 Stellen • reelle Zahlen werden im Rechner etwas anders dargestellt: • Wert: x0 }| x−1 {z x−2 } m=2 Nachkommastellen Pn−1 i =−m xi · 2i 65 / 1 66 / 1 Kodierung Kodierung Umrechnung • z.B.: 6.37510 =?2 : 6 3 1 : : : 2 2 2 = = = Gliederung x 3R 0 ? ? ? 1R 1 ? ? 0R 1 ? ? ? 0.357 ? ? ? 0.75 ? y 0.5 · · · 2 2 2 = = = • Bits, Bytes, Dateien • Darstellung von Texten 0 .75 1 .5 1 .0 • Darstellung ganzer Zahlen • Darstellung von Dezimalzahlen • Ergebnis: 6.37510 = 110.0112 • Nachteil: Signifikante Nachkommastellen gehen verloren; z.B. • Festkommazahlen • Gleitkommazahlen m = 2, 0.01101 → 0.01 (abgerundet) • Fehlertoleranz • Abhilfe: Gleitkommazahlen 67 / 1 68 / 1 Kodierung Kodierung Idee: Speicherung der Zahl und der Position des Kommas • dezimal: 143.7 = 0.1437 · 103 0.00823 = 0.823 · 10−2 • allgemein: • Formal: Eine Gleitkommazahl der Form ±m · 2±e heißt normalisiert, falls • Beispiele für b = 2: x = m · be m Mantisse, b Basis, e Exponent; Abspeicherung als (±m, ±e) 0.00001101 → • keine eindeutige Darstellung, z.B. (dezimal) 3.14 1 ≤ |m| < 1. b 101.0101 → 0.011001 · 2−4 → +2 = 0.0314 · 10 = 0.314 · 101 (∗) = ... 0.1101 · 2−4 0.1010101 · 23 0.11001 · 2−5 • Zahlen werden stets normalisiert dargestellt • (∗) normalisierte Darstellung: Komma vor Mantisse, erste Nachkommaziffer 6= 0 69 / 1 Kodierung 70 / 1 Beispiel: Kodierung x = +0.1235 · 103 y = +0.5512 · 105 Addition / Subtraktion z = −0.5511 · 105 x + y = +0.0012 · 105 + 0.5512 · 105 • Angleichung des Exponenten: „Denormalisieren“ des Operanden mit = +0.5524 · 105 dem kleineren Exponenten x = mx · 2ex • ex ex ex = < > ey : ey : ey : x ±y x ±y x ±y y + z = +0.5512 · 105 − 0.5511 · 105 y = my · 2ey = = = = +0.0001 · 105 = +0.1 · 102 (mx ± my ) · 2ex (mx · 2ex −ey ± my ) · 2ey (mx ± my · 2ey −ex ) · 2ex (x + y ) + z = +0.5524 · 105 − 0.5511 · 105 = +0.0013 · 105 = +0.13 · 103 • anschließend wieder normalisieren x + (y + z ) = +0.1235 · 103 + 0.1 · 102 = +0.1235 · 103 + 0.01 · 103 = +0.1335 · 103 Das Assoziativgesetz gilt nicht! 71 / 1 72 / 1 Kodierung Kodierung Multiplikation / Division Zahlenbereich x ·y = (mx · my ) · 2ex +ey x :y = (mx : my ) · 2ex −ey z >0: z <0: negativer underflow Eine Darstellung im Rechner (n = 32) 1 Bit 0.5 · 2−128 −(1 − 2−23 ) · 2127 negativer underflow z z ≤ ≤ positiver underflow (1 − 2−23 ) · 2127 −0.5 · 2−128 darstellbare positive Zahlen mit Lücken ... 8 Bits 23 Bits Exponent Mantisse −(1−2−23 )·2127 Vorzeichen der Mantisse darstellbare neg. Zahlen mit Lücken ≤ ≤ positiver overflow ... −0.5·2−128 0 0.5·2−128 (1−2−23 )·2127 Probleme: 2−Komplement−Darstel− lung des Exponenten • „Loch um den Nullpunkt“, keine Null • das linkeste Bit der Mantisse ist immer 1 (b = 2). → überflüssig zu z.B.: 0 1 1 1 1 1 1 0 0 1 0 1 1 0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .0 speichern! −4 +0.10112 · 2 = 0.000010112 = 0.0429687510 73 / 1 74 / 1 Kodierung bis ca. 1980: seit 1979: 1985: Kodierung jeder Computerhersteller hat eigenes Gleitkommaformat IEEE-Komitee (Institute of Electrical and Electronic Engineers) IEEE Standard 754, bis heute allgemein akzeptiert IEEE Standard 754 IEEE Standard 754 • Exponenten • single precision (32 Bits) 1 Bit 1. 8 Bits 23 Bits Exponent Mantisse • Excess-127, Bereich [−126, +127] • Excess-1023, Bereich [−1022, +1023] Vorzeichen der Mantisse • kleinste normalisierte Zahl: sp: 2−126 ≈ 10−38 dp: 2−1022 ≈ 10−308 • größte normalisierte Zahl: sp: ≈ 2128 ≈ 1038 dp: ≈ 21024 ≈ 10308 • double precision (64 Bits) 1 Bit 2. 11 Bits 52 Bits Exponent Mantisse Vorzeichen der Mantisse • extended precision (80 Bits) (interner Gebrauch zur Reduzierung von Rundungsfehlern) 75 / 1 76 / 1 Kodierung Kodierung • bisher: Kodierung als Darstellung von Zeichen im Rechner • allgemeiner ist Kodierung die Übertragung von einer Sprache in eine andere Gliederung • d.h. Folgen von Zeichen eines Alphabets werden in Zeichenfolgen eines • Bits, Bytes, Dateien • Darstellung von Texten anderen Alphabets übertragen • bei der Wahl der Kodierung können die folgenden Aspekte eine Rolle • Darstellung ganzer Zahlen • Darstellung von Dezimalzahlen spielen: • Eindeutigkeit der Nachricht • Fehlertoleranz • Kürze der Nachricht • effiziente Durchführung der Operationen • Fehlertoleranz bei Rauschen (Einzelne Bits sind falsch gesetzt.) • Verschlüsselung (Kryptographie) 78 / 1 77 / 1 Kodierung Kodierung Fehlererkennung • in der Übermittlung von Daten können Fehler auftreten • Magnetspeicher können ausfallen • elektronische Speicherstellen können (mit geringer Wahrscheinlichkeit) • Verwendung von parity bits • ein Speicher der Länge n nimmt nur Dualzahlen dn−2 dn−3 . . . d0 der Länge n − 1 auf ihre Informationen verlieren oder verfälschen • das Bit dn−1 wird wie folgt gesetzt: • prinzipiell werden dabei zwei Fehlerquellen unterschieden: • hard errors: Die Zelle ist physikalisch beschädigt dn−1 = • sie liefert immer denselben Wert zurück: (stuck at zero/one) 0, 1, Pn−2 falls i =0 di ungerade sonst P • soft errors: Die Information ist verloren, nach neuem Beschreiben aber • dann muss n−1 i =0 di stets ungerade sein • andernfalls ist ein Fehler aufgetreten vorhanden • dynamische Speicher benutzen kleine Kondensatoren • Ladung = b Zustand “1” entsprechend kann man etwa einer Folge d 1 , . . . d n−1 Vektoren einen parity-Vektor d hinzufügen, so dass dj die Parität der Summen Pn−1 i i =1 dj kontrolliert. • Ladung kann absinken 79 / 1 80 / 1 Kodierung Kodierung Fehlerbehebung Lemma (Hammingcodes) • sei c : M → {0, 1}n eine Kodierung in Blöcke der Länge n • für a, b ∈ {0, 1}n sei d (a, b) = |{i : ai 6= bi }| der Hammingabstand (i) In einem Blockcode c der Länge n können k gleichzeitig auftretende Fehler erkannt werden, wenn h(c) ≥ k + 1 ist. von a, b • sei h(c) = min{d (a, b) : a, b ∈ c(M )} der Minimalabstand von c. (ii) Ist h(c) ≥ 2k + 1, so können sie auch korrigiert werden. Beispiel: Beweis: • sei (i) ist h(c) ≥ k + 1, so kann ein Wort nicht durch k falsche Bits in ein anderes überführt werden c(M ) = 00000, 10011, 01010, 11001, 00101, 10110, 01111, 11100. • dann ist h(c) = 2 • wird z.B. 11011 empfangen und ist maximal ein Bit gekippt, so wurde (ii) Ist h(c) ≥ 2k + 1, so unterscheidet sich das empfangene Wort vom gesendeten in ≤ k bits, das empfangene Wort unterscheidet sich von jedem anderen in mindestens 2k + 1 − k > k Bits. 10011 oder 11001 gesendet. Anwendungen u.a. in RAID-Systemen. 81 / 1 82 / 1