Rechnerstrukturen Michael Engel und Peter Marwedel TU Dortmund, Fakultät für Informatik SS 2013 Hinweis: Folien a. d. Basis von Materialien von Gernot Fink und Thomas Jansen Repräsentation von Daten 11. April 2013 1 Repräsentation von Daten Repräsentation natürlicher Zahlen (Wiederholung) Repräsentation von Texten Repräsentation ganzer Zahlen Repräsentation rationaler Zahlen Repräsentation anderer Daten Repräsentation von Daten b-adische Darstellung – Eigenschaften Theorem Für jede Basis b ∈ N \ {1} und jede natürliche Zahl n ∈ N lässt sich n eindeutig darstellen als 0 1 l n = n0 · b + n1 · b + · · · + nl · b = l X ni · b i i =0 mit l ∈ N0 , n0 , n1 , . . . , nl ∈ {0, 1, . . . , b − 1} und nl > 0. Repräsentation von Daten Umrechnung Basis 10 Basis b Algorithmus 1 Eingabe Basis b ∈ N \ {1}, Betragszahl n ∈ N Ausgabe Repräsentation (nl nl−1 · · · n1 n0 )b 1. l := −1 2. So lange n > 0 gilt l := l + 1 3. nl := n − b · ⌊n/b⌋ 4. n := ⌊n/b⌋ 5. 16 16 b n 38 835 2 427 −1 0 l n0 3 n1 n2 also 38 835 = (9 7 B 3)16 n3 Repräsentation von Daten 16 151 1 3 B 16 9 2 3 B 7 16 0 3 3 B 7 9 Umrechnung Basis 10 Basis b Algorithmus 1 Eingabe Basis b ∈ N \ {1}, Betragszahl n ∈ N Ausgabe Repräsentation (nl nl−1 · · · n1 n0 )b 1. l := −1 2. So lange n > 0 gilt l := l + 1 3. nl := n − b · ⌊n/b⌋ 4. n := ⌊n/b⌋ 5. Definition Unter einem Algorithmus (auch Lösungsverfahren) versteht man eine genau definierte Handlungsvorschrift zur Lösung eines Problems oder einer bestimmten Art von Problemen in endlich vielen Schritten. Repräsentation von Daten Quelle: Wikipedia Repräsentation von Texten Wir können alles aufschreiben.“ ” ⇒ Repräsentation von Texten zentral naiver Ansatz Codierung A 0, B 1, . . . und dann Binärcodierung Probleme ◮ Welche Zeichen sollen codiert werden? ◮ Wie kann man Daten mit anderen austauschen? Lösung Standards Repräsentation von Daten ASCII American Standard Code for Information Interchange ◮ verabschiedet 1963 von der American Standards Organization (ASO) ◮ 7 Bit Code ◮ für die USA gedacht ◮ codiert Zeichen und Steuercodes Repräsentation von Daten ASCII 0000... 0001... 0010... 0011... 0100... 0101... 0110... 0111... 1000... 1001... 1010... 1011... 1100... 1101... 1110... 1111... ....000 NUL BS DLE CAN Repräsentation von Daten ( 0 8 @ H P X ‘ h p x ....001 SOH HT DC1 EM ! ) 1 9 A I Q Y a i q y ....010 STX LF XON SUB ′′ ∗ 2 : B J R Z b j r z ....011 ETX VT DC3 ESC # + 3 ; C K S [ c k s { ....100 EOT FF XOF FS $ , 4 < D L T \ d l t | ....101 ENQ CR NAK GS % 5 = E M U ] e m u } ....110 ACK SO SYN RS & . 6 > F N V ∧ f n v ∼ ....111 BEL SI ETB US ’ / 7 ? G O W g o w DEL ASCII Problem Lösung viele wichtige Zeichen fehlen längere Codierung“, Code erweitern ” Anmerkung Erweitern ist besser als ersetzen. bekannteste Erweiterung hier Repräsentation von Daten ISO-8859-1 auch ISO Latin 1 genannt ISO-8859-1 (ISO Latin 1) International Organization for Standardization (gegründet 1947) ISO Latin 1 ◮ 8 Bit Code (8 Bits nennt man 1 Byte) ◮ enthält viele Sonderzeichen für westeuropäische Sprachen (z. B. Umlaute (ä, ö, ü, . . . )) ◮ enthält nicht alle gewünschten Zeichen (z. B. e, japanische Schriftzeichen, . . . ) Repräsentation von Daten Unicode aktueller Standard Unicode 6.2 (26. September 2012) ◮ verwaltet vom Unicode-Konsortium (http://www.unicode.org) ◮ unterstützt verschiedene Codierungsformate (Unicode Transformation Format): UTF-8, UTF-16, UTF-32 mit 8, 16, 32 Bits ◮ längere Formate erweitern kürzere Formate ◮ vereinbart auch weitere Informationen (z. B. Schreibrichtung, Kombination von Zeichen (Codepoints)) Repräsentation von Daten Repräsentation ganzer Zahlen Wunsch ganze Zahlen z ∈ Z repräsentieren können Vereinbarung feste Repräsentationslänge l Wie viele verschiedene Zahlen kann man so höchstens repräsentieren? l Positionen, jeweils 2 Möglichkeiten ⇒ 2l verschiedene Bitmuster der Länge l Wie Zahlenbereich verwenden – positive und negative Zahlen unterscheiden? Repräsentation von Daten Vorzeichenbetragsmethode erstes Bit restliche Bits Vorzeichen Betragszahl (Binärdarstellung) Vorzeichenbit s = 1 ⇔ Vorzeichen negativ Zahl = (−1)s · Betragszahl“ ” kleinste darstellbare Zahl − 2l−1 − 1 größte darstellbare Zahl 2l−1 − 1 Begründung + + − − Eigenschaften symmetrisch Vorzeichenwechsel einfach 0 nicht eindeutig Vergleich von Zahlen schwierig Repräsentation von Daten Darstellung mit Bias (Exzessdarstellung) Wähle feste Verschiebung b (Bias). z wird als z + b dargestellt (Binärdarstellung) übliche Werte für Bias b = 2l−1 oder b = 2l−1 − 1 kleinste darstellbare Zahl größte darstellbare Zahl + + + + − − −b 2l − 1 − b Eigenschaften 0 eindeutig alle Codes ausgenutzt Vergleich von Zahlen einfach bei üblichem Bias erstes Bit vorzeichenbitanalog nicht symmetrisch Vorzeichenwechsel schwierig Repräsentation von Daten Einerkomplementdarstellung nicht-negative Zahlen negative Zahlen Binärdarstellung Komplement der Binärdarstellung kleinste darstellbare Zahl größte darstellbare Zahl + + − − − − 2l−1 − 1 2l−1 − 1 Eigenschaften symmetrisch erstes Bit wie Vorzeichenbit 0 nicht eindeutig Verschwendung“ eines Codes ” Vergleich von Zahlen schwierig Repräsentation von Daten Zweierkomplementdarstellung nicht-negative Zahlen negative Zahlen Binärdarstellung (Komplement der Binärdarstellung) + 1“ ” kleinste darstellbare Zahl größte darstellbare Zahl + + + − ◮ − 2l−1 2l−1 − 1 Eigenschaften 0 eindeutig repräsentiert erstes Bit wie Vorzeichenbit alle Codes ausgenutzt Vergleich von Zahlen schwierig üblichste Darstellung Repräsentation von Daten Zweierkomplementdarstellung II Beachte: Ex. geschlossene Form zur Berechnung der im Zweierkomplement repräsentierten Zahl Theorem Ein Bitvektor a = (an−1 , ..., a0 ) repräsentiert bei einer Kodierung im Zweierkomplement die Zahl int(a) = −an−1 2n−1 + n−2 X ai 2i i =0 Z.B.: int(1101) = −1 · 23 + 1 · 20 + 0 · 21 + 1 · 22 = (−3)10 Repräsentation von Daten Zweierkomplementdarstellung III Hinweis: Für die Zahlendarstellung im Zweierkomplement ergibt sich folgendes “Zahlenrad” 1...110 1...111 0...000 0...001 0...010 Repräsentation von Daten Ganzzahlen negativ 10...000 01...111 positiv Bereichsüberschreitung Bereichsüberschreitung 2er−Komplement Alles verstanden? haben l = 5, b = 2l−1 = 24 = 16, z = 10010 Welche Zahl wird denn nun repräsentiert? Beobachtung Das hängt von der Darstellung ab. Vorzeichenbetragsdarstellung 1 |{z} 0010 | {z } Vorzeichen Betrag (0010)2 = 0 · 20 + 1 · 21 = 2 also (−1)1 · 2 = −2 Repräsentation von Daten Alles verstanden? haben l = 5, b = 2l−1 = 24 = 16, z = 10010 Welche Zahl wird denn nun repräsentiert? Beobachtung Das hängt von der Darstellung ab. Darstellung mit Bias b = 16 (Exzessdarstellung) (10010)2 = 0 · 20 + 1 · 21 + 0 · 22 + 0 · 23 + 1 · 24 = 2 + 16 = 18 also |{z} 18 − |{z} 16 = 2 Zahl Repräsentation von Daten Bias Alles verstanden? haben l = 5, b = 2l−1 = 24 = 16, z = 10010 Welche Zahl wird denn nun repräsentiert? Beobachtung Das hängt von der Darstellung ab. Einerkomplementdarstellung erstes Bit 1, also negativ Komplement 10010 = 01101 (01101)2 = 1 · 20 + 0 · 21 + 1 · 22 + 1 · 23 = 1 + 4 + 8 = 13 also −13 Repräsentation von Daten Alles verstanden? haben l = 5, b = 2l−1 = 24 = 16, z = 10010 Welche Zahl wird denn nun repräsentiert? Beobachtung Das hängt von der Darstellung ab. Zweierkomplementdarstellung erstes Bit 1, also negativ 10010 − 1 = 10001 Komplement 10001 = 01110 (01110)2 = 0 · 20 + 1 · 21 + 1 · 22 + 1 · 23 = 2 + 4 + 8 = 14 also −14 Repräsentation von Daten Beispielsammlung Darstellungen feste Länge l = 5, (2l = 32, 2l−1 = 16, 2l−1 − 1 = 15) z 1 −1 0 15 −15 16 −16 VZ-Betrag 00001 10001 00000 10000 01111 11111 — — Repräsentation von Daten Bias b = 16 10001 01111 10000 Bias b = 15 10000 01110 01111 11111 00001 — 00000 11110 00000 11111 — 1er-K. 00001 11110 00000 11111 01111 10000 — — 2er-K. 00001 11111 00000 01111 10001 — 10000 Repräsentation rationaler Zahlen Wunsch rationale Zahlen q ∈ Q repräsentieren können Vereinbarung feste Repräsentationslänge l Bits Idee wenn schon feste Darstellungslänge, dann auch feste Position des Kommas Beispiele l = 8, 3 Nachkommastellen 10,34 00010,340 93 847,123 93 847,123 0 00000,000 nicht darstellbar 123 456,78 12,345678 nicht darstellbar, aber runden denkbar Repräsentation von Daten Festkommazahlen klar Basis 10 für uns nicht brauchbar zum Glück Übertragung auf Basis 2 ganz einfach Beispiel 24 = 16 1 16 = 22,625 23 =8 0 22 =4 1 +4 21 =2 1 +2 20 =1 0, 2−1 = 0,5 1 +0,5 2−2 = 0,25 0 allgemein bei v Vorkomma- und m Nachkommastellen vP −1 zi · 2i z= i =−m Repräsentation von Daten 2−3 = 0,125 1 +0,125 Binärdarstellung rationaler Zahlen Beobachtung unabhängig von Darstellungslänge nicht alle Zahlen darstellbar Beispiel 0,2 nicht als binäre Festkommazahl darstellbar Beweis durch Widerspruch (Annahme Doch!) −1 P zi · 2i mit m ∈ N, zi ∈ {0, 1} dann 0,2 = 15 = i =−m 1 also 5 = m X z−j · 2 −j = 2 m−1 X zk−m · 2k = k=0 also 5a = 2m Repräsentation von Daten m X z−j · 2m−j | mit k = m − j j=1 j=1 −m =2 −m Widerspruch a mit a, m ∈ N 2m Ist die Binärdarstellung schlecht? Nein! Es gibt für jede Basis nicht darstellbare rationale Zahlen, die in anderen Basen darstellbar sind. Beispiel 1 3 = (0,1)3 , zur Basis 10 nicht darstellbar Ist Festkommadarstellung schlecht? jedenfalls unflexibel eher für spezielle Anwendungen geeignet Repräsentation von Daten Gleitkommazahlen andere Idee Position des Kommas nach Bedarf z = (−1)s · m · 10e mit s ∈ {0, 1}, e ∈ Z, m ∈ Q und 1 ≤ m < 10 ◮ Exponent e bestimmt Position des Kommas ◮ Mantisse“ m ” normalisierte Gleitkommazahlendarstellung Repräsentation von Daten Gleitkommazahlen für uns besser Basis 2 z = (−1)s · m · 2e mit s ∈ {0, 1}, e ∈ Z, m ∈ Q und 1 ≤ m < 2 Beobachtungen ◮ ◮ Mantisse“ hat immer erste Ziffer 1 ” 0 ist so nicht darstellbar immer besser Repräsentation von Daten an Standards halten IEEE-754 1985 Institute of Electrical & Electronics Engineers z = (−1)s · m · 2e mit s ∈ {0, 1}, e ∈ Z, m ∈ Q und 1 ≤ m < 2 Festlegungen ◮ ◮ ◮ führende 1 der Mantisse“ wird nicht mit abgespeichert (heißt ” implizite Eins“) ” Mantisse in Binärcodierung (Festkommazahlen mit Ziffern ausschließlich hinter dem Komma) Exponent in Exzessdarstellung mit Bias b = 2le −1 − 1 Repräsentation von Daten IEEE 754-1985 feste Anzahlen von Bits Gesamtlänge Vorzeichen Exponent Mantisse 32 1 8 23 single 64 1 11 52 double Precision Hinweis: In IEEE 754-2008 auch 16/128 bit Binär- sowie 32/64 bit Dezimalformate Besonderheiten beim Exponenten Verkleinerung des zulässigen Bereichs um 1 auf beiden Seiten l e −1 auf emin = −b + 1 = − 2 − 1 + 1, und emax = 2le − 1 − b − 1 = 2le −1 − 1 dient der Codierung besonderer Zahlen“ ” Repräsentation von Daten IEEE 754-1985: ein Beispiel l = 32, ls = 1, le = 8, lm = 23 b = 27 − 1 = 127, emin = −b + 1 = −126, emax = 28 − b − 2 = 127 Wir wollen −3 darstellen. negativ, also Vorzeichenbit 1 Darstellung als Summe von Zweierpotenzen 3 = 2 + 1 = 21 + 20 = 20 + 2−1 · 21 Exponent 1 Exzessdarstellung 1 + b = 128 darstellen 128 = (1000 0000)2 Mantisse 1,1, implizite Eins entfällt, also 100 0000 0000 · · · Ergebnis |{z} 1 1000 0000 0000 0000} | {z0000} 100 | 0000 0000{z VZ Repräsentation von Daten Exponent Mantisse IEEE 754-1985: noch ein Beispiel l = 32, ls = 1, le = 8, lm = 23 b = 27 − 1 = 127, emin = −b + 1 = −126, emax = 28 − b − 2 = 127 Wir wollen 0,0546875 darstellen. positiv, also Vorzeichenbit 0 Darstellung als Summe von Zweierpotenzen 0,0546875 = 1 1 1 −5 + 2−6 + 2−7 = 20 + 2−1 + 2−2 · 2−5 32 + 64 + 128 = 2 Exponent −5 Exzessdarstellung −5 + b = 122 darstellen 122 = (0111 1010)2 Mantisse 1,11, implizite Eins entfällt, also 110 0000 0000 · · · Ergebnis |{z} 0 0111 0000 0000 0000} | {z1010} 110 | 0000 0000{z VZ Repräsentation von Daten Exponent Mantisse IEEE 754-1985: ein letztes Beispiel l = 32, ls = 1, le = 8, lm = 23 b = 27 − 1 = 127, emin = −b + 1 = −126, emax = 28 − b − 2 = 127 Wir haben 0 1011 0001 010 1001 0000 0000 0000 0000. 0000 0000 0000} 0 1011 | 1001 0000{z |{z} | {z0001} 010 VZ Exponent Mantisse Vorzeichenbit 0, also positiv Exponent (1011 0001)2 = 177, stellt 177 − b = 177 − 127 = 50 dar Mantisse zuzüglich impliziter Eins 1,0101001 1 1 + 128 (1,0101001)2 = 1 + 41 + 16 also 20 + 2−2 + 2−4 + 2−7 · 250 = 250 + 248 + 246 + 243 = 1 486 539 720 753 152 Repräsentation von Daten IEEE 754-1985: Besondere Zahlen VZ 0 1 s 0 1 s Exponent emax + 1 emax + 1 emax + 1 emin − 1 emin − 1 emin − 1 Mantisse 0 0 6= 0 0 0 m 6= 0 (−1)s · l m P i =1 NaN not a number Welches Bitmuster repräsentiert die Null? letzte Zeile Repräsentation von Daten denormalisierte Darstellung mi · 2−i Zahl“ ” +∞ −∞ NaN 0 −0 · 2emin Wozu denormalisierte Zahlen? klar noch kleinere Zahlen darstellbar Beispiel If x 6= y Then z := 1/(x − y ) x = 0 0000 0001 000 0000 0000 0000 0000 0001 2−126 + 2−149 y = 0 0000 0001 000 0000 0000 0000 0000 0000 2−126 klar x 6= y aber ohne denormalisierte Darstellung x − y = 0 gerundet denormalisiert x − y = 2−149 : 0 0000 0000 000 0000 0000 0000 0000 0001 auf jeden Fall besser If x − y 6= 0 Then z := 1/(x − y ) Repräsentation von Daten Repräsentation anderer Daten hier für uns interessant primitive Daten“ ” (von Hardware direkt unterstützt) zentral Programme in der Regel Bitmuster fester Länge (z.B. 4 Byte): Befehl, Operan Problem Was repräsentiert ein Byte im Speicher? kaum verwendet: Repräsentation von Daten Typbits Repräsentation von Datenfolgen Speicher oft in Worten organisiert Wort ja nach Rechner 2 Bytes, 4 Bytes, . . . heterogene Daten hintereinander in den Speicher schreiben dabei manchmal Wortgrenzen beachten dann leere Zellen (Bytes) möglich homogene Daten Problem Arrays Wie erkennt man das Ende der Folge? ◮ feste Anzahl vereinbaren ◮ Länge am Anfang speichern ◮ spezielles Endezeichen verwenden Repräsentation von Daten