1 Zahlendarstellung im Rechner Rechner „denken“ binär! Daraus lässt sich unmittelbar folgern: Alles, was sich mit binärer Codierung darstellen lässt, kann in einem Rechner verarbeitet werden. Allgemein handelt es sich bei allen behandelten Zahlensystemen inklusive des uns am geläufigsten Dezimalsystems um ein Stellenwertsystem oder Positionssystem. Stellenwertsystem: Stelle/Position bestimmt Wert der jeweiligen Ziffer niederwertigste Stelle steht rechts hat Basis b Zifferposition hat Wert, der Potenz der Basis b an der entsprechenden Stelle/Position entspricht o für n-te Position Wert bn-1 Zahlenwert z n b n ... z i b i ... z 0 b 0 Berechnung des Zahlenwertes (Interpretation der Zahl): 1) Multiplikation der Ziffern zi mit den zugehörigen Stellenwerten (Potenzen) bi 2) Summation/Addition der Produkte Für Zahlendarstellung im Rechner gilt: Basis b 2 Dies gilt für alle im Rechner verwendeten Zahlendarstellungen gleichermaßen, also auch für die vom Dual- bzw. Binärsystem abgeleiteten Oktal- und Hexadezimaldarstellungen. Oktalsystem Basis b 8 2 3 Hex System Basis b 16 2 4 Beispiele: Dualsystem: 2 5 0 2 4 1 2 3 1 2 2 1 21 1 20 101110 2 1 32 0 8 4 2 0 4610 1 82 0 81 7 80 6078 6 Oktalsystem: 6 64 0 8 7 1 384 0 7 39110 Hexadezimalsystem: 2 1 0 2 BE16 2 16 11 16 14 16 2 256 11 16 14 1 512 176 14 70210 Die Wertigkeit der Basis bestimmt den notwendigen Werteumfang der einzelnen Stellen (Ziffern, Koeffizienten) im Stellenwertsystem. Dual: Oktal: Hexadezimal: 0,1 0,1,...,7 0,1,...,15 2 Zustände kodierbar 8 Zustände kodierbar 16 Zustände kodierbar 2 Ziffernwerte 8 Ziffernwerte 16 Ziffernwerte Hexadezimal: [0,1,2,..., 9, A, B, C, D, E, F] Einstellige Hex-Zahl F drückt damit das Produkt 15 mal 160 aus Umwandlung vom Dezimalsystem in Dual-/Oktal-/Hexadezimalsystem Prinzip: fortgesetzte ganzzahlige Division der Dezimalzahl durch die entsprechende Basis liefert als Restwerte (modulo Operation) die Ziffern (Koeffizienten) für die jeweilige Potenz der Basis Beispiele: Dual: z10 = 46 46 : 2 = 23 23 : 2 = 11 11 : 2 = 5 5:2=2 2:2=1 1:2=0 Rest 0 Rest 1 Rest 1 Rest 1 Rest 0 Rest 1 niederwertigste Stelle höchstwertige Stelle z2 = 101110 2 Oktal: z10 = 391 391 : 8 = 48 48 : 8 = 6 6:8=0 Rest 7 Rest 0 Rest 6 niederwertigste Stelle höchstwertige Stelle z8 = 607 Hex: z10 = 702 702 : 16 = 43 43 : 16 = 2 2 : 16 = 0 Rest 14 = E niederwertigste Stelle Rest 11 = B Rest 2 höchstwertige Stelle z16 = 2BE Umwandlung vom Dualsystem in Oktal-/Hexadezimalsystem einfach, da alle Systeme die gleiche Basis 2 beinhalten Oktal: jeweils 3 Dualziffern bzw. –stellen zusammengefasst Hex: jeweils 4 Dualziffern bzw. –stellen zusammengefasst Beispiele: Dual > Oktal: z 2 101 110 z8 5 Dual > Hex: 6 z 2 1001 1101 z16 9 1310 9D16 3 2 Zahlendarstellung im Rechner (Fortsetzung) Mit der bislang behandelten Zahlendarstellung im Rechner können wir lediglich nichtnegative, ganze Zahlen repräsentieren, was natürlich nicht den tatsächlichen Gegebenheiten im Rechner entspricht. Wie werden nun vorzeichenbehaftete Zahlen und Brüche in einer „rechnerverständlichen“ Darstellungsform repräsentiert? Und wie rechnet der Rechner mit der ihm innewohnenden binären Zahlendarstellung? 2.1 Rechnen mit Dualzahlen 2.1.1 Wiederholung der schriftlichen Ausführung der Grundrechenarten im Dezimalsystem Schriftliche Addition: Von rechts beginnend mit Übertrag auf die jeweils nächsthöhere Stelle bzw. Potenz zur Basis 10 3 + 2 4 9 1 8 7 6 1 Summand Summand Übertrag 1 Ergebnis ---------------------------6 4 5 7 -------------Summe 6+1=7 Übertrag 0; 7+8=15 Übertrag 1; 9+Übertrag1+4=14 Übertrag 1; 2+Übertrag1+3=6 Schriftliche Subtraktion: Man "füllt" die abzuziehende Zahl (Zahl des Subtrahenden) soweit auf, dass die Zahl des Minuenden erreicht wird; auch hier gibt es Übertrag, nämlich immer dann, wenn die Zahl des Minuenden kleiner als die Zahl des Subtrahenden ist, was bedeutet, dass eine Zehnerpotenz übersprungen wurde Übertrag Ergebnis 2 1 7 9 5 6 1 4 Minuend Subtrahend -----------------------------7 8 7 1 1 1 ---------------Differenz 4 bis 11 = 7 Übertrag 1; 6+1 bis 15 = 8 Übertrag 1; 9+1 bis 17 = 7 Übertrag 1; 1+1 bis 2 = 0 Schriftliche Multiplikation: Ein Produkt ist die Addition gleicher Summanden, wobei ein Faktor den jeweiligen Summanden und ein weiterer Faktor die Anzahl der Summierungen darstellt. Dies ist insbesondere für die technische Realisierung im Rechner von Interesse, da man für das Ausführen einer Multiplikation eigentlich nur ein Addierwerk benötigt. Bei der schriftlichen Multiplikation wird die erste Zahl mit den einzelnen Ziffern der zweiten Zahl nacheinander, beginnend bei der letzten Stelle, multipliziert. Für jede 4 neue Ziffer wird eine neue Zeile benötigt. Man schreibt jede Multiplikation untereinander und addiert die einzelnen Werte. 37 x 31 = 1147 ---------37 111 ---------1147 Faktor1 x Faktor2 = Produkt Schriftliche Division: Wir beginnen von links aus zu suchen, welchen möglichst kurzen Abschnitt des Dividenden wir durch den Divisor teilen können. 871 : 5 = 174,2 5 ---------37 35 ---------21 20 ---------10 10 ---------0 Dividend : Divisor = Quotient Analog zu den Zahlen im Dezimalsystem lassen sich mit Dualzahlen die gängigen arithmetischen Grundoperationen Addition, Subtraktion, Multiplikation und Division durchführen. Tatsächlich werden die benötigten Algorithmen sogar einfacher und lassen sich effizient mit logischen Schaltungen elektronisch realisieren. Die Einführung von Dualzahlen in der Rechentechnik brachte daher viele Vorteile. 2.1.2 Grundrechenarten im Dualsystem Duale/binäre Addition: Die binäre Addition ist eine grundlegende Basisoperation in der Computerwelt. Will man zwei nicht negative Binärzahlen A und B addieren, kann man dies wie im Dezimalsystem tun. Nur muss man beachten, dass beim Ergebnis keine Zwei an der jeweiligen Stelle notiert wird, sondern eine Null und ein Übertrag an die nächste Stelle. Dies geschieht analog zu dem Fall einer Dezimaladdition, wenn sich eine Zahl größer oder gleich Zehn bei der Addition einer Stelle ergibt: Die Zahlen werden übereinander aufgeschrieben. Nun arbeitet man von rechts nach links alle Binärziffern (=Bits) von A und B simultan ab und erzeugt in jedem Zwischenschritt ein Ergebnisbit sowie ein Merkerbit (auch Übertrag genannt). Dabei werden die Bits entsprechend der Tabelle unten zusammengezählt. Alle 5 Ergebnisbits, von rechts nach links aneinandergereiht, stellen das Resultat dar. Entsteht beim letzten Zwischenschritt ein Merkerbit, so bekommt das Resultat links eine zusätzliche 1. Es gelten folgende Rechenregeln: 0+0=0 0+1=1 1+0=1 1 + 1 = 0 Übertrag 1 Am besten sieht man dies anhand eines Beispieles. Hier werden die Zahlen A und B zusammengezählt. In jedem Schritt wird ein anfallendes Merkerbit bei der nächsten Ziffer notiert. A = 10011010 (154 dezimal) B = 00110110 (54 dezimal) Merker = 11111 -------Ergebnis = 11010000 (208 dezimal) ======== Duale Subtraktion: Es gelten folgende Rechenregeln: 0−0=0 0 − 1 = −1 (dargestellt als 1 und Übertrag 1) 1−0=1 1−1=0 0 - 1 mit Übertrag 1 = 0 mit Übertrag 1 1 - 1 mit Übertrag 1 = 1 mit Übertrag 1 Es wird im nachfolgenden Beispiel die Subtraktion der dual codierten Dezimalzahlen 110 − 23 = 87 durchgeführt. Die kleinen Einsen in der dritten Reihe zeigen den Übertrag. Das Verfahren ist das Gleiche, wie es in der Schule für das Dezimalsystem unterrichtet wird. Etwas ungewohnt sieht der Fall 0-1 aus. Zum Beispiel im Fall 2 − 9 im Dezimalsystem, denkt man sich eine Zehnerstelle vor die Zwei, wodurch sich die Subtraktion 12 − 9 ergibt. Die gedachte Zehnerstelle wird dann als Übertrag an die nächste Stelle weitergereicht. Im Dualsystem geschieht das Gleiche. Aus 0 − 1 wird 10 − 1. Es kann als Ergebnis also eine 1 hingeschrieben werden, die vor die 0 gedachte Eins muss dann als Übertrag an die nächste Stelle geschrieben und von dieser zusätzlich abgezogen werden. Das Verfahren funktioniert (wie auch im Dezimalsystem) nicht, wenn der Minuend kleiner ist als der Subtrahend. Beispiel: A = 1101110 (110 dezimal) B = 10111 (23 dezimal) Merker = 1 111 -------Ergebnis = 1010111 (87 dezimal) Die Subtraktion einer positiven Zahl ergibt dasselbe Ergebnis wie die Addition zu einer negativen Zahl mit dem gleichen Betrag. 6 Duale Multiplikation: Es gelten folgende Rechenregeln: 0x0=0 1x0=0 0x1=0 1x1=1 Die Multiplikation wird im Dualsystem genauso durchgeführt wie im Dezimalsystem. Dadurch dass nur 0 und 1 als Ziffern vorkommen ist die schriftliche Multiplikation jedoch sogar einfacher. Das folgende Beispiel, in dem die Zahlen 1100 (12) und 1101 (13) multipliziert werden, zeigt die Vorgehensweise. Zuerst schreibt man die Aufgabenstellung in eine Zeile und zieht zur Vereinfachung einen Strich darunter. 1100 · 1101 ----------- 1100 · 1101 ----------1100 Die erste Ziffer des zweiten Faktors ist eine Eins und deshalb schreibt man den ersten Faktor rechtsbündig unter diese Eins. Auch für alle weiteren Einsen des zweiten Faktors schreibt man den ersten Faktor rechtsbündig darunter. 1100 · 1101 ----------1100 1100 0000 1100 Die so gewonnenen Zahlen zählt man dann zum Ergebnis der Multiplikation zusammen. 1100 · 1101 ----------1100 + 1100 + 0000 + 1100 ----------10011100 (156) 7 Ein besonders einfacher Fall ist die Multiplikation einer positiven Dualzahl mit der Zahl 10 (2). In diesem Fall muss lediglich an die positive Dualzahl eine 0 angehangen werden: 1101 · 10 = 11010 11010 · 10 = 110100 usw. Für diese Rechenoperation existieren einfache Befehle in der Digitaltechnik. Duale Division: Es gelten folgende Rechenregeln: 0 : 0 = nicht definiert 1 : 0 = nicht definiert 0:1=0 1:1=1 Im nachfolgenden Beispiel erfolgt die Division von 1000010 / 11 (entspricht 66:3 im Dezimalsystem): 1000010 ÷ 11 = 010110 Rest 0 (= 22 dezimal) − 011 ----00100 − 011 ---0011 − 011 ----000 − 00 --0 Bei der Division zweier positiver Dualzahlen verbleibt immer ein Rest 1, wenn die letzte Ziffer des Dividenden eine 1 ist. Die Anwendung der Modulo-Funktion mit dem Divisor 10 (2) auf positive Dualzahlen ergibt ergibt immer 1, wenn die letzte Ziffer des Dividenden 1 ist und 0, wenn die letzte Ziffer des Dividenden 0 ist: 1101 mod 10 = 1 1100 mod 10 = 0 Für diese Rechenoperation, die einer UND-Verknüpfung mit 1 entspricht, existieren einfache Befehle in der Digitaltechnik. 8 Ein besonders einfacher Fall ist die Division mit Rest einer positiven Dualzahl durch die Zahl 10 (2). In diesem Fall muss lediglich die letzte Ziffer des Dividenden gestrichen werden. Ist die letzte Ziffer des Dividenden eine 1, so verschwindet dieser Rest. Entspricht bei diesem Verfahren die Anzahl der Divisionen durch 2 der Anzahl der Stellen des Dividenden, so ist das Endergebnis immer 0: 1101 ÷ 10 = 110 110 ÷ 10 = 11 11 ÷ 10 = 1 1 ÷ 10 = 0 Für diese Rechenoperation existieren einfache Befehle in der Digitaltechnik. 9