Binärcodierung elementarer Datentypen: Darstellung negativer Zahlen Statt positive Zahlen von 0 bis 2 n -1mit einem Bitmuster der Länge n darzustellen und arithmetische Operationen darauf auszuführen, werden oftmals auch negative Zahlen benötigt. Elegante Lösung: Zweierkomplementdarstellung Addition zweier positiver Dualzahlen und solcher in Zweierkomplementdarstellung ergibt das gleiche Bitmuster Informatik I 1 WS 2005/2006 Zweierkomplementdarstellung für n Bits Nutze aus, dass z 2 n - z (mod 2 n ) Positive Zahlen von 0 bis 2 n -1-1wie bisher Darstellung negativer Zahlen z als 2 n - z 0 Binärcodierung elementarer Datentypen: Zweierkomplement 2 n -1 = 2 n -1-1 2 n -2 n -1 2 n -1 Beispiel: 4-Bit Dualzahlen im Zweierkomplement 1 0 2 1 2 n 0-1 1 0 2 n -1-1 2 n -1 1 2 n -1 2 n -1 2 n -1-1 Informatik I 2 WS 2005/2006 1
Binärcodierung elementarer Datentypen: Zweierkomplement Eigenschaften des Zweierkomplements Höchstes Bit zeigt an, ob die Zahl positiv oder negativ ist Der dargestellte Zahlbereich ist nicht symmetrisch Es gibt eine negative Zahl mehr als positive Zahlen Die Repräsentation der 0 ist nicht redundant (d.h. es gibt eine eindeutige Darstellung der 0) Informatik I 3 WS 2005/2006 Binärcodierung elementarer Datentypen: Zweierkomplement Der Zahlenwert w(b n-1 b 1 b 0 ) der n-bit Zahl b n-1 b 1 b 0 mit Darstellung im Zweierkomplement ergibt sich wie folgt: w( b n 1 i n n 1 Kb1b 0) = bi 2 bn 1 2 i= 0 = = = n 2 i= 0 n 2 i= 0 n 2 i= 0 b 2 i i b 2 i i + b b i b i 2 b n 1 n n 1 2 bn 1 2 n 1 n n 1 ( 2 2 ) 14243 = 2 n 1 n 1 2 n 1 Informatik I 4 WS 2005/2006 2
Binärcodierung elementarer Datentypen: Zweierkomplement Alternative Bestimmung des Wertes negativer Zahlen Schritt 1: Invertiere alle Bits Schritt 2: Bestimme den Zahlenwert Schritt 3: Addiere 1 zu dem erhaltenen Wert Schritt 4: Der Wert der dargestellten Zahl ergibt sich durch Negation des Ergebnis von Schritt 3 Beispiel: Vorgegebene Zahldarstellung: 1010110 Invertiere alle Bits: 0101001 Bestimme den Zahlenwert: 2 5 + 2 3 + 2 0 = 32 + 8 + 1 = 41 Addiere 1 : 41 + 1 = 42 Die dargestellte Zahl ist: 42 (Bem.: Bitweises vertauschen allein definiert das Einerkomplement) Informatik I 5 WS 2005/2006 Zahlkonversion Zur Umrechnung einer im Dezimalsystem gegebenen Zahl in ein Stellenwertsystem mit einer anderen Basis b > 1 eignet sich folgendes übersichtliche Schema: 225 =? 6 225 = 37 6 + 3 37 = 6 6 + 1 6 = 1 6 + 0 1 = 0 6 + 1, folglich gilt: 225 = 1013 6 Informatik I 6 WS 2005/2006 3
Zahlkonversion Will man umgekehrt eine Zahl aus einem nichtdezimalen Stellenwertsystem in das Dezimalsystem umrechnen, so braucht man nur die Koeffizienten mit den zugehörigen Potenzen der Basis zu multiplizieren und diese Produkte zu addieren: 2130 4 = 2 4 3 + 1 4 2 + 3 4 + 0 =2 64 + 1 16 + 3 4 = 156 (Bem.: Zur Automatisierung und bei großen Zahlen empfiehlt sich die Verwendung des Horner-Schemas!) Informatik I 7 WS 2005/2006 Binärcodierung elementarer Datentypen: Zeichen Mit n Bit können 2 n Zeichen dargestellt werden Für 26 Großbuchstaben mindestens 5 Bit erforderlich Wenn auch Kleinbuchstaben, Sonderzeichen usw. codiert werden sollen, dann sind 7 Bit sinnvoll Zuordnung Zeichen Bitmuster Konvention Gebräuchlich: ISO 7 Bit (ASCII), EBCDIC ASCIIist in ISO 8 Bit enthalten (höchstes Bit 0) und 16 Bit Unicode (obere 9 Bit sind 0) Informatik I 8 WS 2005/2006 4
Informatik I 9 WS 2005/2006 Binärcodierung elementarer Datentypen: Zeichen Alle UNIX-Rechner verwenden ASCII zur Zeichencodierung Java arbeitet mit UNICODE In Java stellt man einen Zeichenwert entweder durch das Zeichen in Hochkommata dar (Falls die Tastatur dies ermöglicht und es kein Sonderzeichen, wie etwa ein Hochkomma '\'' ist) Beispiel: char c = 'A'; oder gibt das Bitmuster in UNICODE als Hexadezimalzahl an Beispiel: char c = '\u0041'; Ziffernzeichen haben nicht den Binärcode des Zahlenwertes Kann bei ASCII durch einfachen Konversionsalgorithmus erhalten werden: Beispiel: char c = '7'; int z = c - '0'; Informatik I 10 WS 2005/2006 5
Neben ganzen Zahlen sind auch Gleitkommazahlen ein wichtiger elementarer Zahlentyp Im englischen Dezimalpunkt statt Komma, daher Floating-Point Annäherung an rationale Zahlen Nur endliche Genauigkeit Enthalten auch spezielle Zahlen (später) Darstellung einer Floating-Point Zahl z z = ( 1) Vorzeichenbit Mantisse Basis Exponent Informatik I 11 WS 2005/2006 Floating-Point Zahlen nach IEEE 754-1985 32 Bitfloat 64 Bitdouble Die Binärdarstellung einer Zahl 0 ist normalisiert auf Werte aus dem Intervall [1, 2) Das höchstwertige Bit wird unterdrückt (hidden bit) Der Exponent wird stets als positive Zahl dargestellt. Der tatsächliche Wert ergibt sich als: Basis ist 2 Exponent - Verschiebung (bias) 127 bei 32-Bit-Darstellung (float) 1023 bei 64-Bit-Darstellung (double) Informatik I 12 WS 2005/2006 6
Beispiel: 5,375 Die Mantisse wird wie folgt berechnet: Konvertierung in Binärdarstellung mit Komma: 5,375 = 101,011 2 Normierung auf ±1, 2 Exponent (D.h. das Komma wird so verschoben, dass eine 1 vor dem Komma steht): 101,011 2 = 1,01011 2 2 2 Danach wird nur die Bitfolge nach dem Komma als Mantisse gespeichert ( hidden bit) Damit ergibt sich: 5,375 = 1,01011 2 2129 127 Vorzeichenbit = 1, Exponent = 10000001, Mantisse = 010110 0 Informatik I 13 WS 2005/2006 Weitere Besonderheiten: Spezielle Floating-Point Zahlen +0 bzw. 0: v 0 0 0 0 Nicht normalisierte Zahl: v 0 0 0 0 + bzw. : v 1 1 0 0 NaN(Not-a-Number): v 1 1 0 0 Wenn kein sinnvolles Ergebnis einer arithmetischen Operation zugewiesen werden kann» Etwa 0 / 0»Oder + + Man beachte aber, dass etwa + + 5 den Wert + hat Informatik I 14 WS 2005/2006 7
Im Gegensatz zur Ganzzahlarithmetik kann es bei Floating-Point-Operationen zu Rundungsfehlern (round off error) kommen Multiplikationen erzeugen z.b. längere Mantissen, die wieder auf Standardformat gerundet werden müssen Bei der Addition muss eine Mantisse so verschoben werden, dass beide Zahlen mit dem gleichen Exponenten dargestellt sind Hierbei können einige und im Extremfall alle Bits der Mantisse eines Summanden aus dem Darstellungsbereich herausfallen Beispiele: Übersichtlicher dezimal Mantisse: 2 Stellen 1,34e0 3,45e2 = 4,623e2 4,62e2 1,34e0 + 3,45e2 = 0,0134e2 + 3,45e2 = 3,4634e2 3,46e2 Informatik I 15 WS 2005/2006 Bei längeren Berechnungen können sich diese Rundungsfehler sehr schnell anhäufen: Insbesondere wenn sowohl sehr kleine als auch sehr große Zahlen involviert sind Verschiedene Berechnungsverfahren für dieselbe Funktion können zu verschiedenen Ergebnissen führen Diese können numerisch stabil oder instabil sein Diese wichtige Problematik wird im Bereich numerischer Algorithmen genauer untersucht Informatik I 16 WS 2005/2006 8
Bei Konversion von Dezimal in Dual kann es bei Floating-Point Zahlen zu Konversionsfehlern kommen Endlicher Dezimalbruch kann unendlicher Dualbruch sein Beispiel: 0,1 = 0,00011001100110011... 2 Informatik I 17 WS 2005/2006 Algorithmus zur Konversion Informatik I 18 WS 2005/2006 9
Variablen und der Typ von Variablen Da Menschen Dinge lieber mit Namen bezeichnen statt mit numerischen Adressen zu arbeiten, kennt jede Programmiersprache das Konzept einer Variablen (variable) als abstraktes Analogon zu einer Speicherstelle Eine Variable hat einen symbolischen Namen (name) hinter dem eine Adresse verborgen ist derwert (value) der Variablen ist das dort gespeicherte Bitmuster Um diesen erschließen zu können, hat die Variable einen Typ (type), der bei ihrer Vereinbarung angegeben werden muss Informatik I 19 WS 2005/2006 Variablen und der Typ von Variablen In jeder Programmiersprache gibt es einige fest eingebaute elementare Datentypen, wie etwa char (Schriftzeichen, character) int (endlich große ganze Zahlen, integer) float (endlich große Gleitkommzahlen, floating point numbers) Jedem elementaren Typ entspricht ein Code, der jedem Wert dieses Typs ein Bitmuster einer festen Länge zuordnet: char (ASCII, Unicode), int (2er-Komplement), float (IEEE 754), Informatik I 20 WS 2005/2006 10
Programme als Daten Auch Programme können als Daten aufgefasst und wie solche gespeichert werden Programme im Quelltext (source code) sind Texte in einer beliebigen Programmiersprache wie z.b. Java Sie bestehen also aus Schriftzeichen Genauer: Der Typ des Binärcodes ist char Programme in Objektcode (object code) bestehen aus Befehlen, die in der spezifischen Sprache eines Prozessor-Typs geschrieben sind Typ des Binärcodes also abhängig vom Prozessor-Typ Informatik I 21 WS 2005/2006 Prozessor und Programmausführung Prozessor = Steuerwerk + arithmetisch-logische Einheit (ALU) +Register Steuerwerk: holt aus dem Speicher Befehle und führt sie aus Befehle sind in Maschinensprache CISC= complex instruction set computer RISC= reduced instruction set computer Informatik I 22 WS 2005/2006 11
Prozessor und Programmausführung Befehlsbeispiele LOAD: Lade Daten aus dem Speicher in ein Register STORE: Schreibe Daten aus einem Register in den Speicher ADD: Addiere zwei Register und lege das Ergebnis in ein drittes Register ab (wird von ALU ausgeführt) JUMP: Springe an eine Befehlsadresse im Speicher CONDITIONAL JUMP: Springe in Abhängigkeit von Registerinhalten oder Flags, z.b.: Zeroflag ZF, Signflag SF, Carryflag CF, Overflowflag OF Informatik I 23 WS 2005/2006 Von Neumann Architektur Daten und Programm gemeinsam im Hauptspeicher Fundamentaler Befehlsausführungszyklus Spezielles Register als Befehlszeiger zur Speicherung der aktuellen Programmadresse Befehlsregister speichert auszuführenden Befehl Informatik I 24 WS 2005/2006 12
Fundamentaler Befehlsausführungszyklus Fetch: Hole Befehl, dessen Adresse im Befehlszeiger steht, aus dem Speicher in das Befehlsregister Increment: Inkrementiere den Befehlszeiger, damit er auf den nächsten auszuführenden Befehl weist Decode: Dekodiere den Befehl, damit klar wird, was zu tun ist Fetch operands: Falls nötig, hole die Operanden aus den im Befehl bezeichneten Stellen in Speicher Execute: Führe die Instruktion aus, ggf. durch die ALU. Bei einem Sprung wird ein neuer Wert in den Befehlszeiger geschrieben. Loop: Gehe zum ersten Schritt (Fetch) Informatik I 25 WS 2005/2006 Chip Technik CPUin VLSI Technik VLSI = very large scale integration Transistoren als Grundstruktur Größenordnung 0,1 Micron = 1/10.000.000 m Moore's Law: Anzahl der Transistoren je Chip verdoppelt sich in jeweils 18 Monaten Pentium II: 7 Mio. Transistoren Itanium-2: 220 Mio. Transistoren Phys. Grenze (1 Transistor besteht aus wenigen Atomen) um 2020 Informatik I 26 WS 2005/2006 13
Ein paar Takte zur Geschwindigkeit Chips sind getaktet: Pro Takt wird eine einfache Operation ausgeführt heute 4 GHz: 1 Takt = 0,25 ns Lichtstrecke bei 0,25 ns = 7,5 cm Im Abstand von 0,75 m beobachten wir am Chip also die vergangenen Zustände von vor 10 Takten! Komplexe Operationen brauchen mehrere Takte z.b. Multiplikation oder Befehl mit Operanden im Speicher Lösungsansatz: pipelining Pipelining: parallele Dekodierung mehrerer nachfolgender Befehle Bei Sprüngen tritt die erwartete Beschleunigung nicht ein Viele Register, schnelle Zwischenspeicher (Caches) Informatik I 27 WS 2005/2006 14