7. Übung zur Vorlesung Grundlagen der Informatik 13.Interne Darstellung von Daten In der Vorlesung wurde bereits darauf hingewiesen, dass ein Rechner intern lediglich die Zustände 0 (kein Signal liegt an) und 1 (Signal liegt an) kennt. Das bedeutet, dass alle Informationen, die mit einem Rechner verarbeitet werden sollen, in eine diesem Muster entsprechende Darstellung übersetzt werden müssen. Man unterscheidet in diesem Zusammenhang interne und externe Daten. Unter externen Daten versteht man Zeichenfolgen, die aus einem festen Zeichensatz aufgebaut werden, der wiederum die möglichen Zeichen der I/O- Devices beinhaltet. Dabei gelten folgende Begrifflichkeiten: Numerische Zeichen Alphabetische Zeichen Sonderzeichen 0, 1, 2,,9 A, B, C,, Z, a, b, c,, z +, -, *, /,,!,., %, Leerzeichen, Numerische und alphabetische Zeichen werden auch als alphanumerische Zeichen zusammengefasst. Jedes dieser Eingabezeichen wird zunächst in eine eindeutige Bitfolge die interne Darstellung umgewandelt. Grundlage dafür ist die sog. ASCII- Code-Tabelle (American Standard Code for Information Interchange, 1967), die jedem Zeichen eine Zahl zuordnet, worüber es identifiziert werden kann: 7.Übung zur Vorlesung Grundlagen der Informatik Seite 1 von 8 Dipl.-Phys. Thomas Thull
Der ASCII-Code verwendet nur 7 Bit zur Zeichencodierung, ein 8.Bit war ursprünglich für Paritätsprüfungen reserviert. Im Englischen sind 2 7 = 128 Zeichen ausreichend, um alle alphanumerischen Zeichen und Sonderzeichen abzubilden. Darüber hinaus können auch Spezial- und Steuerzeichen, wie NL bzw. LF (New Line bzw. Line Feed = Zeilenvorschub), CR (Carriage Return = Wagenrücklauf) oder BEL (Bell = akustisches Signal), in ausreichender Zahl berücksichtigt werden. Um weitere Zeichen darstellen zu können, wurde eine Reihe zusätzlicher Standards entwickelt, die aber immer zu ASCII kompatibel waren und sind. Der für Westeuropa Wichtigste lautete ISO 8859-1, enthielt u.a. die deutschen Umlaute und setzte auf einer 8-Bit-Codierung auf. Heutzutage spielt der Unicode mit 16 Bit und 2 16 Zeichen die entscheidende Rolle. In der internen Darstellung hat somit z.b. der Buchstabe A folgende Werte: 65 = (41) 16 = (1000001) 2 = (01000001) 2. Ein einzelner Buchstabe oder ein einzelnes Zeichen wird als character bezeichnet, eine Zeichenkette (Wort, Satz, Absatz, ) als string. Worte werden immer durch ein Leerzeichen (Space) voneinander getrennt, Zeichenketten meist durch ein besonderes (Steuer-)Zeichen terminiert. In Abhängigkeit vom jeweiligen Datentyp wird die interne Darstellung zur Weiterverarbeitung noch anderweitig konvertiert. Zahlen bspw. werden in ihrer Dualdarstellung im Speicher abgelegt, um damit Rechenoperationen durchführen zu können. Beispiele: Externe Darstellung Interne Darstellung Dualdarstellung Auto (41 75 74 6F) 16 = keine (01000001 01110101 01110100 01101111) 2 15 (31 35) 16 = (00110001 00110101) 2 (00001111) 2 Es lässt sich am Beispiel der Zahl 15 erkennen, dass die unterschiedlichen Darstellungen auch unterschiedlich viel Speicherplatz benötigen. Die interne Darstellung benötigt 2 Byte (die Zahl besteht aus zwei Zeichen), die Dualdarstellung hingegen würde schon mit 4 Bit auskommen. Allerdings könnte man dann auch nur im Zahlenraum von 0 bis 15 (bei natürlichen Zahlen) bzw. -8 bis +7 (bei ganzen Zahlen) arbeiten, was eine ziemliche Einschränkung bedeuten würde. Für die Praxis sind deutlich größere Zahlenbereiche relevant, auch wenn sie entsprechend mehr Speicher benötigen. Auf diese soll im Folgenden detailliert eingegangen werden: 7.Übung zur Vorlesung Grundlagen der Informatik Seite 2 von 8 Dipl.-Phys. Thomas Thull
a) Natürliche Zahlen: z 0, Dualdarstellung mit festgelegter Bitzahl Speicherplat z in Byte MIN (kleinste darstellbare Zahl) MAX (größte darstellbare Zahl) 1 (0000 0000) 2 = 0 (1111 1111) 2 = 255 = 2 8 1 2 0 65 535 = 2 16 1 4 0 4 294 967 295 = 2 32 1 b) Ganze Zahlen: z 0: Dualdarstellung mit festgelegter Bitzahl z < 0: Komplementdarstellung von z Speicherplat z in Byte MIN (kleinste darstellbare Zahl) MAX (größte darstellbare Zahl) 1 (1000 0000) 2 = 128= 2 7 (0111 1111) 2 = 127 = 2 7 1 2 32 768 = 2 15 32 767 = 2 15 1 4 2 147 483 648 = 2 31 2 147 483 647 = 2 31 1 Die Darstellung von natürlichen Zahlen in verschiedenen Zahlensystemen wurde in der Vorlesung und in verschiedenen Übungen inzwischen hinreichend behandelt. Was noch aussteht, ist eine Verallgemeinerung auf alle Zahlen. c) Rationale Zahlen Darstellung als Gleitkommazahl (Gleitpunktzahl) mit Mantisse M und Exponent E (gemäß IEEE754) 1. Umwandlung der Kommazahl in eine Dualzahl: Beispiel: 3.15625 = 3 + 0.15625 = (11) 2 + (?) 2 Berechnung der Dualdarstellung von 0.15625: 0.15625 2 = 0.3125 0.3125 2 = 0.625 0.625 2 = 1.25 0.25 2 = 0.5 0.5 2 = 1.0 0.15625 = (0.00101) 2 3.15625 = (11) 2 + (0.00101) 2 = (11.00101) 2 2. Kommaverschieben liefert Mantisse und Exponent: 7.Übung zur Vorlesung Grundlagen der Informatik Seite 3 von 8 Dipl.-Phys. Thomas Thull
(11.00101) 2 = (1.100101) 2 (10) 2 = (1.100101) 2 2 1 Mantisse: 100101 ( 1. ist obsolet, wird weggelassen) Exponent: 1+B (B ist der sog. Bias) Vorzeichen: 0 (0 bei positiver, 1 bei negativer Zahl) Die Mantisse M ist in ihrer Stellenzahl durch den zur Verfügung stehenden Speicherplatz beschränkt. Gleiches gilt für den Exponenten E, der mittels des konstanten Bias B immer in den positiven Bereich verschoben wird. Der Wert des Bias hängt ebenfalls vom für ihn vorgesehenen Speicherplatz ab. Komplettiert wird die Maschinenzahldarstellung durch ein sog. Vorzeichenbit. 3. Darstellung als Maschinenzahl: Die Darstellung als Maschinenzahl hängt also elementar von dem zur Verfügung stehenden Speicherplatz ab. Im Allgemeinen hat sie die Form: Vz. Exponent Mantisse y+1 y x+1 x 0 Legt man bspw. fest, dass die Maschinenzahl aus 32 Bit bestehen soll, von denen 8 für den Exponenten und 23 für die Mantisse genutzt werden sollen, erhält man: Vz. Exponent Mantisse 31 30 23 22 0 Das heißt, dass in den Bits 0 bis 22 die Mantisse liegt, in den Bits 23 bis 30 der Exponent und in Bit 31 das Vorzeichen. Die kleinste so darstellbare Zahl (von 0 abgesehen) hat den Wert 1.18 10-38, die größte den Wert 3.40 10 38. Dabei wurde der Bias gemäß (2 k-1-1) mit dem Wert 127 berücksichtigt (k ist die Anzahl der für den Exponenten zur Verfügung stehenden Bits). Übertragen auf das Beispiel 3.15625 bedeutet dies: 3.15625 0 10000000 10010100000000000000000 Ist die Mantisse länger als die zur Verfügung stehende Anzahl an Bits, muss gerundet werden. Rechnet man diese Maschinenzahl dann wieder zurück, so erhält man einen ungenaueren Wert. Das bedeutet, dass intern extrem gerundet werden kann, ohne dass dies von außen beeinflusst werden kann. Eine weitere Erkenntnis ist, dass es Bereiche gibt, in denen sich Zahlen nicht maschinentauglich darstellen lassen. Unter näherer Betrachtung zeigt sich, dass die Abstände zwischen darstellbaren Zahlen von MIN nach MAX zunehmen. 7.Übung zur Vorlesung Grundlagen der Informatik Seite 4 von 8 Dipl.-Phys. Thomas Thull
Man kann folgendes Verhalten erkennen: Zahlen zwischen MIN und MAX, die nicht dargestellt werden können, werden immer auf die darstellbaren Zahlen gerundet Rundungsfehler! Zahlen zwischen 0 und MIN (bzw. MIN und 0) können ebenfalls nicht dargestellt werden. Es entsteht eine Darstellungslücke, der sog. Unterlauf. Zahlen in diesem Bereich werden ebenfalls gerundet Rundungsfehler! Zahlen größer als MAX (bzw. kleiner als MAX) sind nicht mehr darstellbar. Man spricht von einem Überlauf, der in der Regel mit einem Programmabbruch bestraft wird. Nach dem IEEE-Standard 754 sind folgende Zahlenbereiche üblich: Bezeichnung Speicherplatz Mantisse Exponent in Bit in Bit Genauigkeit single 4 Byte = 32 Bit 23 8 6-stellig double 8 Byte = 64 Bit 52 11 15-stellig Bezeichnung ± MIN ± MAX single 1.18 10-38 3.40 10 38 double 2.23 10 308 1.80 10 +308 Aufgaben: a) Übersetzen Sie folgende Worte und Sätze in Maschinencode (gemäß ASCII): i) Informatik (49 6E 66 6F 72 6D 61 74 69 6B) 16 ii) 714 + 99 (37 31 34 20 2B 20 39 39) 16 (Leerzeichen nicht vergessen!) iii) Ende gut, (45 6E 64 65 20 67 75 74 2C 2E 2E 2E) 16 Das Umrechnen nach binär sei jedem selbst überlassen b) Wandeln Sie folgende Zahlen in IEEE754-Maschinenzahlen um (Typ single ): i) 166.125 Lösung: 1. Umwandeln in Dualzahl: 166 = (10100110) 2 0.125 =? 0.125 2 = 0.25 0.25 2 = 0.5 0.5 2 = 1.0 7.Übung zur Vorlesung Grundlagen der Informatik Seite 5 von 8 Dipl.-Phys. Thomas Thull
0.125 = (0.001) 2 166.125 = (10100110.001) 2 2. Kommaverschiebung: (10100110.001) 2 = (1.0100110001) 2 2 7 3. Maschinenzahl (Typ single ): Objekt Größe Wert Anmerkung Vorzeichen 1 Bit 0 Zahl positiv Bias 8 Bit 127 (2 k-1-1) mit k=8 Exponent 8 Bit 7 + 127 = 134 = (10000110) 2 Komma wurde um 7 Stellen verschoben Mantisse 23 Bit (01001100010000000000000) 2 Anhängen von Nullen zum Auffüllen Insgesamt erhält man also: 166.125 0 10000110 01001100010000000000000 Übersichtlicher lässt sich das schreiben als: 0100 0011 0010 0110 0010 0000 0000 0000 = (43 26 20 00) 16 Diese Schreibweise dient lediglich der besseren Lesbarkeit und findet so keine Anwendung! ii) 8,124.0375 Lösung: 1. Umwandeln in Dualzahl: 8,124 = (1111110111100) 2 0.0375 =? 0.0375 2 = 0.075 0.075 2 = 0.15 0.15 2 = 0.3 0.3 2 = 0.6 0.6 2 = 1.2 0.8 2 = 1.6 0.6 2 = 1.2 = Man erkennt, dass sich die Zahlenreihen wiederholen 0.0375 = (0.0000100110011001100110011 ) 2 8,124.0375 = (1111110111100.000010011001100110011 ) 2 7.Übung zur Vorlesung Grundlagen der Informatik Seite 6 von 8 Dipl.-Phys. Thomas Thull
2. Kommaverschiebung: (1111110111100.000010011001100110011 ) 2 = (1.111110111100000010011001100110011 ) 2 2 12 3. Maschinenzahl (Typ single ): Objekt Größe Wert Anmerkung Vorzeichen 1 Bit 0 Zahl positiv Bias 8 Bit 127 (2 k-1-1) mit k=8 Exponent 8 Bit 12 + 127 = 139 = (10001011) 2 Komma wurde um 12 Stellen verschoben Mantisse 23 Bit (111110111100000010011001 ) 2 = (11111011110000001001101) 2 Runden! iii) 0.1 Insgesamt erhält man also: 8,124.0375 0 10001011 11111011110000001001101 Übersichtlicher lässt sich das schreiben als: 0100 0101 1111 1101 1110 0000 0100 1101 = (45 FD E0 4D) 16 Lösung: 1. Umwandeln in Dualzahl: 0.1 =? 0.1 2 = 0.2 0.8 2 = 1.6 0.6 2 = 1.2 0.8 2 = 1.6 0.6 2 = 1.2 = Man erkennt, dass sich die Zahlenreihen wiederholen 0.1 = (0.0001100110011001100110011 ) 2 2. Kommaverschiebung: (0.000110011001100110011 ) 2 = (1.10011001100110011001100110011 ) 2 2-4 7.Übung zur Vorlesung Grundlagen der Informatik Seite 7 von 8 Dipl.-Phys. Thomas Thull
3. Maschinenzahl (Typ single ): Objekt Größe Wert Anmerkung Vorzeichen 1 Bit 0 Zahl positiv Bias 8 Bit 127 (2 k-1-1) mit k=8 Exponent 8 Bit 4 + 127 = 123 = (01111011) 2 Komma wurde um 4 Stellen nach rechts (!) verschoben Mantisse 23 Bit (100110011001100110011001 ) 2 = (10011001100110011001101) 2 Runden! Insgesamt erhält man also: 0.1 0 01111011 10011001100110011001101 Übersichtlicher lässt sich das schreiben als: 0011 1101 1100 1100 1100 1100 1100 1101 = (3D CC CC CD) 16 7.Übung zur Vorlesung Grundlagen der Informatik Seite 8 von 8 Dipl.-Phys. Thomas Thull