Informationen zu Grundlagen digitaler Systeme (GDS) Lothar Müller Beuth Hochschule Berlin Zahlensysteme, Digitalarithmetik 1 Das Dezimalsystem Wenn wir „im normalen Leben“ rechnen, machen wir das im Dezimalsystem, ohne uns darum besondere Gedanken zu machen. Dabei ist dieses System nur eins von vielen. Kennzeichnend für ein solches Zahlensystem (es handelt sich um ein Positionssystem) ist seine Basis. Sie bestimmt den Wert einer Ziffer innerZahlensysteme lassen sich in 2 Gruppen einteilen: halb einer Zahl und die Anzahl der benöPositions- und Additionssysteme. Beim Additionssystem ergibt sich der Wert einer Zahl aus der Summe der tigten verschiedenen Ziffern. Beim Dezieinzelnen Ziffern; zusätzlich können Differenzbildungen verwendet werden. mal- oder dekadischen System ist die Dagegen bestimmt sich beim Positionssystem der Wert einer Zahl nicht nur aus den Werten der einzelnen Ziffern, sondern auch aus ihrer Position innerBasis 10 (gr. deka, lat. decem), d.h. es halb der Zahl: Je weiter links eine Ziffer steht, desto größer ist ihr Wert. gibt 10 verschiedene Ziffern {0...9}, die im Alle heute verwendeten Zahlensysteme sind Positionssysteme. Bekanntestes Beispiel für ein Additionssystem ist das römische Zahlensystem. Bereich der natürlichen Zahlen die ersten 10 Werte (0...9) darstellen können. Sobald dieser Wertebereich überschritten wird, wird linksseitig eine zweite Ziffer aus dem gleichen Ziffern1 vorrat {0...9} verwendet, die jedoch entsprechend ihrer Position mit dem Wert 10 (= 10) bewertet wird. Dadurch wird ein Zahlenraum von 0 bis 99 mit nur 2 Ziffern darstellbar. Wenn dieser Bereich nicht aus2 3 reicht, wird er durch weitere linksseitig angeordnete Ziffern vergrößert, deren Wertigkeit 10 , 10 usw. beträgt. Allgemein ergibt sich für den Aufbau einer natürlichen Dezimalzahl Zd das folgende Schema: Zd = dn • 10 n-1 + dn-1 • 10 n-2 1 0 + ... + d2 • 10 + d1 • 10 mit d = Dezimalziffer {0...9} n = Anzahl der Ziffern. Beispiel: 2 4 3 2 1 0 Zd = 10435 = 1 • 10 + 0 • 10 + 4 • 10 + 3 • 10 + 5 • 10 Andere Positionssysteme Grundsätzlich sind neben dem Dezimalsystem beliebig viele andere Positionssysteme (mit von 10 verschiedenen Basen) denkbar; in Im Grundsatz waren Positionssysteme bereits bei den Babyloniern in Gebrauch. Allerdings wurde erst um 800 u.Z. in Indien die Ziffer 0 und damit die Möglichkeit von Leerstellen der Praxis bedeutend sind für eingeführt. uns (als Informatiker) jedoch Frühere Kulturen verwendeten als Zahlenbasis statt der 10 auch die 12 oder die 60. nur Systeme, deren Basis 2 Grundlage für diese Wahl war offensichtlich die größere Universalität dieser Zahlen (vielfältige Teilbarkeit). Überbleibsel dieser Systeme begleiten uns bis heute: oder eine Potenz von 2 ist, - die Einteilung des Jahres in 12 Monate denn alle heutigen Digitalrech- die Einteilung des Tages in (2x) 12 Stunden à 60 Minuten à 60 Sekunden - die Aufteilung des Kreisbogens in 360° à 60 Bogenminuten à 60 Bogensekunden ner arbeiten mit dem Dual- oder - auf 12 basierende Maße wie Dutzend (= 12) und Gros (= 12 Dutzend) Binärsystem mit der Basis 2 - britische Maßeinheiten wie Fuß (= 12 Zoll), Yard (= 3 Fuß). Das in der Informatik bedeutende Dualsystem mit der Basis 2 wurde um 1675 von Gottfried (lat. duo: zwei; lat. bini: je zwei, Wilhelm Leibniz entwickelt. Eine praktische Anwendung fand es jedoch erst in der Comein Paar). In diesem System putertechnik des 20. Jahrhunderts. gibt es nur 2 Ziffern {0,1}, und n-1 jede Ziffer wird entsprechend ihrer Position mit 2 bewertet. Damit ergibt sich für den Aufbau einer natürlichen Binärzahl Zb das folgende Schema: Zb = b n • 2 n-1 + bn-1 • 2 n-2 1 0 + ... + b2 • 2 + b1 • 2 mit b = Binärziffer {0,1} n = Anzahl der Ziffern. Beispiel: File: Date: 5 4 3 2 1 0 Zb = 101011 = 1 • 2 + 0 • 2 + 1 • 2 + 0 • 2 + 1 • 2 + 1 • 2 Zahlensysteme.Doc 01.04.2009 Seite 1 von 12 © Lothar Müller 2004...2009 Informationen zu Grundlagen digitaler Systeme Zahlensysteme, Digitalarithmetik Da die Zahlen im Dualsystem schnell groß und damit für uns Menschen unübersichtlich werden, fassen wir mehrere Binärziffern zu Gruppen zusammen und stellen dafür neue Ziffern bereit. So gelangen wir zu 3 Zahlensystemen, deren Basen Potenzen von 2 sind; von diesen sind das Oktal- (Basis ist 8 = 2 , lat. 4 octo: acht) und insbesondere das Hexadezimalsystem (Basis ist 16 = 2 , gr. hex: sechs) von Bedeutung. Die folgende Tabelle stellt wichtige Zahlensysteme im Vergleich vor und zeigt beispielhaft die Darstellung verschiedener Zahlen sowie mögliche Notationen: Darstellung der dezimalen Zahlen ... System Basis Ziffern 1 2 8 10 15 16 65 Notation 102, %10, 10B Dual- 2 0, 1 1 10 1000 1010 1111 10000 1000001 Oktal- 8 0, 1, ..., 7 1 2 10 12 17 20 101 108, [010] Dezimal- 10 0, 1, ..., 9 1 2 8 10 15 16 65 1010, (ohne) Hexadezimal- 16 0, 1, ..., 9, A, B, ..., F 1 2 8 A F 10 41 1016, $10, 10H, 0x10 3 Umrechnung zwischen verschiedenen Zahlensystemen 3.1 Umrechnung von Systemen mit der Basis n in das Dezimalsystem Die Umrechnung erfolgt über die Ermittlung der (dezimalen) Werte der einzelnen Ziffern der Ausgangszahl mit der Basis n und die nachfolgende Addition dieser Werte. Beispiele für n = 2 und n = 16: 101102 3.2 dezimal ergibt: 0 0•2 = 0 1 2 1•2 = 2 1•2 = 4 3 0 0•2 = 4 1 • 2 = 16 Summe: 22 3EA4C16 dezimal ergibt: 0 12 • 16 = 1 4 • 16 = 2 10 • 16 = 3 • 14 16 = 4 3 • 16 = Summe: 12 64 2560 57344 196608 256588 Umrechnung vom Dezimalsystem in Systeme mit der Basis m Hier erfolgt die Umrechnung durch fortlaufende Division der dezimalen Ausgangszahl durch die Basis m des Zielsystems und rechtsbündige Aufreihung der Divisionsreste. Die Division wird fortgesetzt, bis das Ergebnis 0 wird (wobei der dabei auftretende Rest noch berücksichtigt werden muss!). Beispiele für n = 2 und n = 16: 3910 binär ergibt: 39 : 2 = 19 Rest 1 19 : 2 = 9 Rest 1 9 : 2 = 4 Rest 1 4 : 2 = 2 Rest 0 2 : 2 = 1 Rest 0 1 : 2 = 0 Rest 1 1 11 111 0111 00111 100111 39710 hexadezimal ergibt: 397 : 16 = 24 Rest 13 24 : 16 = 1 Rest 8 1 : 16 = 0 Rest 1 D 8D 18D Fertig! Fertig! File: Date: Zahlensysteme.Doc 01.04.2009 Seite 2 von 12 © Lothar Müller 2004...2009 Informationen zu Grundlagen digitaler Systeme Zahlensysteme, Digitalarithmetik 3.3 Umrechnung von einem System mit der Basis n in ein System mit der Basis m Diese Umrechnung erfolgt am sinnvollsten in zwei Schritten: - zunächst Umrechnung vom System mit der Basis n in das Dezimalsystem - anschließend Umrechnung vom Dezimalsystem in das Zielsystem mit der Basis m. Dies gilt nicht, wenn beide Basen 2 oder eine Potenz von 2 sind. Denn in diesem Fall können wir über das Binärsystem und einfaches Umgruppieren der Binärziffern eine sehr einfache Umrechnung vornehn men, weil jede Ziffer eines Systems mit der Basis 2 genau n Binärstellen entspricht. Eine linksseitig möglicherweise auftretende unvollständige Gruppe wird dabei durch Einfügen führender Nullen ergänzt. Beispiel einer Umrechnung der Hexadezimalzahl D74B16 in das Oktalsystem: 1. Umrechnung hexadezimal binär: (jede HEX-Ziffer entspricht 4 Binärziffern) 2. Rechtsbündiges Umgruppieren zu 3er-Gruppen: 3. Umrechnung binär oktal: D 7 4 B 1101 0111 0100 1011 001 101 011 101 001 011 1 5 3 5 1 3 (jede Oktalziffer entspricht 3 Binärziffern) Das Ergebnis ist also 1535138. 4 Rechnen in nichtdezimalen Zahlensystemen Grundsätzlich können wir alle aus dem Dezimalsystem bekannten Rechenregeln auch in anderen Zahlensystemen anwenden. Die Addition erfolgt durch Untereinanderschreiben der Summanden und stellenrichtiges Addieren der einzelnen Ziffern, wobei Überträge berücksichtigt werden müssen. Beispiele: 387710 + 145410 = ? A15C16 + 6BD516 = ? 3877 + 1454 A15C + 6BD5 5331 10D31 (Übertrag) 0 1 1 1 1 0 1 1 1001012 + 101102 = ? + 100101 10110 0 0 1 0 0 111011 Die Subtraktion kann entsprechend erfolgen, wobei es aber zu Bereichsüberschreitungen kommen kann, solange wir nur natürliche Zahlen verwenden (denn diese umfassen ja nicht die negativen Zahlen). Die Multiplikation erfolgt ebenfalls wie vom Dezimalsystem bekannt. Beispiel einer Multiplikation von zwei hexadezimalen Zahlen: 6C16 • B516 = ? 6C • B5 4A4 21C 4C5C Die Division kann entsprechend dem aus dem Dezimalsystem bekannten Verfahren erfolgen, was jedoch schwierig zu beherrschen ist. Außerdem tritt bei der Division häufig eine Überschreitung des Zahlenbereichs statt, solange wir keine gebrochenen Zahlen zulassen. File: Date: Zahlensysteme.Doc 01.04.2009 Seite 3 von 12 © Lothar Müller 2004...2009 Informationen zu Grundlagen digitaler Systeme Zahlensysteme, Digitalarithmetik 5 Ganze Zahlen Die Erweiterung des Bereichs der natürlichen Zahlen um die negativen Zahlen ergibt den Zahlenbereich der ganzen Zahlen. Sie ermöglichen es, Subtraktionen ohne die Gefahr einer Bereichsüberschreitung durchzuführen. Falls der Subtrahend größer als der Minuend sein sollte (d.h. die Differenz ist negativ), können beide Operanden vertauscht und das Ergebnis anschließend mit einem Minuszeichen versehen werden. Beispiel: 15C16 - 5D516 = ? (Übertrag) Der Subtrahend ist größer, deshalb beide Operanden vertauschen! 5D5 - 15C 0 0 1 479 Das Ergebnis ist also - 47916. Anmerkung: Wir werden später eine andere Form der Subtraktion kennen lernen, die ohne vorherigen Größenvergleich der Operanden auskommt. Divisionen können auch im Bereich der ganzen Zahlen zu Bereichsüberschreitungen führen, da weiterhin keine gebrochenen Zahlen zugelassen sind. 5.1 Integer-Zahlen Der Begriff integer ist streng genommen lediglich die englische Bezeichnung für „ganze Zahl“. In der Informatik bezeichnet integer einen „Datentyp“, der ungebrochene Zahlen innerhalb eines definierten Wertebereichs umfasst. Damit wird der Endlichkeit realer Rechenwerke Rechung getragen. Integer-Zahlen sind dem Wortsinn nach vorzeichenbehaftet (ganze Zahlen können positiv oder negativ sein), können jedoch auch als vorzeichenlos (positiv) definiert sein (üblicherweise bezeichnet als signed bzw. unsigned). In einem Zahlenraum verfügbare Zahlen können wir auf einem Zahlenstrahl darstellen, wie im folgenden Beispiel für natürliche Zahlen dargestellt: 0 1 0110 6 5 1000 0111 0101 2 7 8 1001 1010 9 5 0100 1011 11 1100 12 3 13 2 0010 0001 File: Date: 10 4 0011 10 1 0 15 0000 Zahlensysteme.Doc 01.04.2009 14 1101 1110 1111 15 20 Nur die Mathematik kennt einen Zahlenraum beliebiger Größe! In realen Systemen ist der Zahlenraum dagegen immer begrenzt. Um das Verhalten realer Rechenwerke darzustellen, begrenzen wir den Zahlenstrahl auf die im jeweiligen System verfügbaren Zahlen und formen durch die Verbindung von Anfang und Ende des Strahls einen Zahlenkreis. Nebenstehend ist als Beispiel ein Zahlenkreis wiedergegeben, an dem das Verhalten eines Rechenwerkes für natürliche 4-Bit-Zahlen gezeigt werden kann. Der 4 Wertebereich umfasst 2 = 16 Ziffern, nämlich 0...15 (dezimal) bzw. 0000...1111 (binär). Additionen können grafisch nachvollzogen werden, indem vom ersten Summand ausgehend im Uhrzeigersinn „abgezählt“ wird; bei Subtraktionen muss entsprechend vom Minuend ausgehend Seite 4 von 12 © Lothar Müller 2004...2009 Informationen zu Grundlagen digitaler Systeme Zahlensysteme, Digitalarithmetik gegen den Uhrzeigersinn gezählt werden. Zwischen den Werten 15 und 0 liegt die Bereichsgrenze, bei deren Überschreitung fehlerhafte Ergebnisse entstehen. Zum Beispiel ergibt die Addition von 14 und 3 beim gezeigten Rechenwerk nicht 17, sondern 1. Dieses Ergebnis ist natürlich falsch, jedoch wird ein reales 4-Bit-Rechenwerk (für natürliche Zahlen) genau dieses Ergebnis ermitteln! Solange wir uns auf natürliche Zahlen beschränken, ist die Zuordnung dezimal Zahlen werden im Rechenwerk binär dargestellt. binär einfach: Dezimale Um vorzeichenbehaftete Integerzahlen darstellen zu können, muss eine Vereinbarung zur Darstellung negativer Zahlen getroffen werden. Üblicherweise wird dabei eine Binärziffer (ein „Bit“) für die Darstellung des Vorzeichens verwendet. Nahe liegend ist es, die ganz links stehende höchstwertige Binärziffer als Vorzeichen zu interpretieren: 0: Zahl ist positiv 1: Zahl ist negativ. Damit behalten in einem 4-Bit-System die Binärziffern 0000...01112 ihren Wert von +0...+710, während die Ziffern 1000...11112 die negativen Zahlen -0...-710 darstellen. Allerdings treten bei Anwendung dieser Notation diverse Probleme auf, die das Rechnen aufwendig werden lassen: - es existieren zwei Bereichsgrenzen es wird zwischen „positiver“ und „negativer“ Null unterschieden ein durchgehendes Rechnen zwischen positivem und negativem Zahlenraum ist nicht möglich vor jeder Berechnung ist zunächst eine Bewertung des Vorzeichens erforderlich. Um diese Nachteile zu vermeiden, wurde die 2er-Komplement-Darstellung eingeführt. 5.2 Komplementbildung In jedem Zahlensystem mit der Basis B können mindestens 2 Komplemente (lat.: complementum: Vervollständigung(smittel)) gebildet werden, nämlich das B- und das (B-1)-Komplement. Das (B-1)-Komplement zu einer Zahl wird gebildet durch Subtraktion dieser Zahl von der höchsten Zahl, die bei gleichbleibender Anzahl der Ziffern gebildet werden kann. Das B-Komplement entsteht aus dem (B-1)-Komplement durch Addition von 1. Im Dezimalsystem ist die Basis 10, entsprechend existieren ein 10er- und ein 9er-Komplement. Letzteres wird gebildet durch Subtraktion von der Zahl 99999....9, das 10er-Komplement durch anschließende Addition von 1. Das folgende Beispiel zeigt die Bildung dieser Komplemente zur Zahl 823510: 9999 - 8235 1764 + = 9er-Komplement 1764 1 1765 = 10er-Komplement Da die stellenweise Subtraktion immer von der höchsten im Zahlensystem vorkommenden Ziffer aus erfolgt, treten dabei grundsätzlich keine Überträge auf. Bei der folgenden Addition von 1 können dagegen Überträge auftreten. Ein möglicherweise an der höchstwertigen Stelle auftretender Übertrag bleibt unberücksichtigt (000010 hat in einem 4-stelligen Rechenwerk das 9er-Komplement 9999 und das 10er-Komplement 0000 (nicht: 10000)). Durch Verwendung des Komplements kann eine „echte“ Subtraktion vermieden werden; stattdessen wird das B-Komplement des Subtrahenden gebildet (eine Subtraktion, bei der keine Überträge auftreten können) und zum Minuend addiert, auftretende Bereichsüberschreitungen werden ignoriert. File: Date: Zahlensysteme.Doc 01.04.2009 Seite 5 von 12 © Lothar Müller 2004...2009 Informationen zu Grundlagen digitaler Systeme Zahlensysteme, Digitalarithmetik In einem Rechenwerk für 4-stellige Dezimalzahlen stellt sich z.B. die Aufgabe 9516 - 8235 = 1281 wie folgt dar: 1. 2. 10er-Komplementbildung von 8235 wie oben beschrieben (=1765) Addition 9516 + 1765 = 11281. Da das Rechenwerk jedoch nur 4-stellige Zahlen verarbeiten und darstellen kann, tritt die führende 1 nicht auf und das Ergebnis beträgt 1281. Im hexadezimalen Zahlensystem werden entsprechend das 15er- und das 16er-Komplement gebildet, im binären Zahlensystem das 1er- und das 2er-Komplement. Die folgenden Beispiele zeigen diese Komplementbildungen für die Zahlen 6BC116 bzw. 101110112: FFFF - 6BC1 943E + 11111111 - 10111011 = 15er-Komplement 1 943F 01000100 + = 16er-Komplement = 1er-Komplement 1 01000101 = 2er-Komplement Beim Vergleich der Binärzahl mit ihrem 1er-Komplement fällt auf, dass die Ziffern des 1er-Komplements jeweils genau den gegenteiligen Wert der Ursprungszahl haben, d.h. jede 0 wurde durch eine 1 ersetzt und umgekehrt. Dieser Vorgang heißt Invertierung (oder: Inversion). Daraus folgt, dass die Erzeugung des 2er-Komplements zu einer Binärzahl durch Invertierung dieser Zahl und anschließende Addition von 1 erfolgen kann, d.h. es wird keine Subtraktion benötigt. 5.3 Integer-Zahlen in 2er-Komplement-Notation Auch bei dieser Notation gibt das höchstwertige Bit das Vorzeichen an: 0: Zahl ist positiv 1: Zahl ist negativ. Im Unterschied zum weiter oben angeführten Verfahren wird jedoch vereinbart, dass negative Zahlen im 2er-Komplement dargestellt werden. Damit ergibt sich für ein Rechenwerk für 4-stellige Binärzahlen der nebenstehend abgebildete Zahlenkreis. Offensichtlich bestehen die zuvor gefundenen Nachteile nicht mehr: - es existiert eine Bereichsgrenze (jetzt aber zwischen +7 und -8) - es gibt nur eine Null - ein durchgehendes Rechnen zwischen positivem und negativem Zahlenraum ist möglich - eine Bewertung des Vorzeichens vor der Berechnung ist nicht erforderlich. Der zuletzt genannte Punkt ergibt sich daraus, dass die Subtraktion direkt als Addition der entsprechenden negativen Zahl vorgenommen werden kann. File: Date: Zahlensysteme.Doc 01.04.2009 1000 0111 0110 6 0101 7 -8 -7 1001 1010 -6 5 0100 4 1100 -4 3 0011 1011 -5 -3 2 0010 0001 1 0 -1 0000 -2 1101 1110 1111 Seite 6 von 12 © Lothar Müller 2004...2009 Informationen zu Grundlagen digitaler Systeme Zahlensysteme, Digitalarithmetik Das folgende Beispiel zeigt die Vorgehensweise für die Rechnung 3 - 7 = - 4; sie wird ausgeführt als 3 + (- 7) = - 4. Dies ergibt: 0011 + 1001 (Übertrag) 0 1 1 1100 + 310 + (- 710) - 410 Zusammengefasst stellen sich die Vorteile der 2er-Komplementdarstellung für negative Zahlen wie folgt dar: - das Vorzeichen des Zahl ergibt sich direkt aus dem höchstwertigen Bit positive und negative Zahlen können direkt addiert werden die Subtraktion wird durch die Addition des negierten zweiten Summanden realisiert die Negierung (=Bildung des 2er-Komplements) geschieht durch Invertierung und anschließende Addition von 1 - d.h. das Rechenwerk muss keine Subtraktion beherrschen. Als einziges Problem bleibt die Bereichsgrenze übrig, bei deren Überschreitung ungültige Ergebnisse entstehen. Grundsätzlich kann der zulässige Zahlenbereich durch Einführung zusätzlicher Binärstellen erweitert, jedoch niemals grenzenlos werden. Deshalb wird ein Indikator benötigt, der nach jeder Berechnung Auskunft über die Gültigkeit des Ergebnisses gibt. 5.4 Übertrag und Überlauf Wird bei der Addition von zwei Zahlen der für das jeweilige Rechenwerk gültige Wertebereich überschritten, tritt ein Übertrag in die nächste (fiktive) Stelle auf, die im realen Rechenwerk nicht existiert. Dies führt dazu, dass das Ergebnis der Addition als „nicht korrekt“ zu bewerten ist. Die nachfolgend dargestellten zwei Additionen von unsigned integer numbers machen den Sachverhalt deutlich; dabei beträgt n die Datenbreite 8 Bit, der Wertebereich (unsigned!) ist also 0...2 -1 (0...25510): (Übertrag) 00110101 + 10010111 0 0 1 1 0 1 1 1 11001100 + 5310 + 15110 + 20410 01110101 + 10010111 + 11710 + 15110 100001100 + 26810 1 1 1 1 0 1 1 1 Übertrag Im linken Beispiel tritt oberhalb der höchsten Binärstelle kein Übertrag auf, das Ergebnis liegt innerhalb des verfügbaren Wertebereichs und ist damit korrekt. Im rechten Beispiel dagegen wird der Wertebereich überschritten (268 > 255), wodurch oberhalb der höchsten Binärstelle ein Übertrag auftritt. Im Ergebnis ist die daraus resultierende führende 1 durch einen senkrechten Strich abgetrennt, um zu symbolisieren, dass das den Beispielen zugrunde liegende Rechenwerk über diese Stelle nicht verfügt. Vielmehr ermittelt es ein nur 8-stelliges Ergebnis, das hier 000011002 = 1210 beträgt und damit „nicht korrekt“ ist. Allerdings muss das Ergebnis nicht zwangsläufig verworfen werden, vielmehr kann es im Rahmen einer zusätzlichen Berechnung verwendet werden; denn das korrekte Ergebnis (26810) ergibt sich aus der Addition des durch den Übertrag repräsentierten Wertes 25610 und des ermittelten Ergebnisses (1210). Beim Rechnen mit vorzeichenbehafteten Zahlen in 2er-Komplement-Darstellung ist der Übertrag als Indikator für die Gültigkeit der Ergebnisse nicht geeignet, wie die folgenden Beispiele für signed integer numn-1 n-1 bers zeigen. Die Datenbreite beträgt wieder 8 Bit, der Wertebereich (signed!) ist also -2 ...+2 -1 (-12810...+12710): (Übertrag) Überlauf! File: Date: 01010000 + 01010111 0 1 0 1 0 0 0 0 10100111 Zahlensysteme.Doc 01.04.2009 + 8010 + 8710 - 8910 Kein Überlauf 01110101 + 10010111 + 11710 - 10510 100001100 + 1210 1 1 1 1 0 1 1 1 Seite 7 von 12 © Lothar Müller 2004...2009 Informationen zu Grundlagen digitaler Systeme Zahlensysteme, Digitalarithmetik Im linken Beispiel führt die Addition von zwei positiven Zahlen zu einem negativen und damit falschen Ergebnis. Offensichtlich wurde der Zahlenbereich überschritten, ohne dass ein Übertrag auftrat! Das rechte Beispiel enthält exakt dieselben Binärzahlen wie das weiter oben dargestellte Beispiel, wobei der zweite Summand jedoch wegen der Darstellung im 2er-Komplement nicht +15110, sondern -10510 entspricht. Das erzielte Ergebnis (+1210) ist offensichtlich korrekt, obwohl hier ein Übertrag auftritt! Beim Rechnen mit vorzeichenbehafteten Zahlen in 2er-Komplement-Darstellung wird als Indikator statt des Übertrags der Überlauf verwendet. Beide Begriffe haben völlig unterschiedliche Bedeutungen, werden aber leicht verwechselt, weil sie ähnlich klingen. Diesen Nachteil haben die englischen Bezeichnungen nicht: Übertrag Überlauf = Carry = Overflow (C, CY) (OV, OF) Die Bildung des Overflows kann auf zwei Arten erfolgen: 1. Es werden die Vorzeichen der beiden Summanden und des Ergebnisses verglichen: Ein Overflow tritt auf, wenn beide Summanden dasselbe und das Ergebnis ein abweichendes Vorzeichen aufweisen, d.h. entweder beide Summanden positiv sind und das Ergebnis negativ oder umgekehrt. Die Vorzeichen ergeben sich direkt aus den Werten der jeweils obersten Binärstelle. Bei HEX-Zahlen gilt die Zuordnung: führende Ziffer im Bereich 0...7: Zahl ist positiv, führende Ziffer im Bereich 8...F: Zahl ist negativ. 2. Es werden Carry-Input (Cin) und Carry-Output (Cout) der obersten Binärstelle verglichen: Ein Overflow tritt auf, wenn Carry-In und Carry-Out verschieden sind. Die erste genannte Methode ist für den menschlichen Betrachter die geeignetere, weil die Werte der Vorzeichen (= führenden Binärziffer) leicht abgelesen werden können. Die zweite Methode wird dagegen von realen Rechenwerken verwendet, weil sie ohne großen Aufwand realisiert werden kann. An den oben angeführten Beispielrechnungen können beide Methoden leicht nachvollzogen werden. Reale Rechenwerke stellen die Informationen zum Auftreten von Carry und Overflow standardmäßig bereit; es ist dann Aufgabe des jeweiligen Programms, diese Informationen abzufragen und daraus die richtigen Schlüsse zu ziehen, wie im Folgenden angegeben: Carry unsigned integer numbers signed integer numbers 6 Reelle Zahlen 6.1 Überblick Overflow Nein: Ergebnis korrekt Ja: Bereichsüberschreitung! ohne Bedeutung ohne Bedeutung Nein: Ergebnis korrekt Ja: Bereichsüberschreitung! Durch die Einführung der gebrochenen oder reellen Zahlen können alle vier Grundrechenarten inklusive der Division angewandt werden, ohne dass es zu ungültigen bzw. nicht darstellbaren Ergebnissen kommen kann. Allerdings erfordert es einen erheblichen Mehraufwand, ein Rechenwerk so zu gestalten, dass es neben den ganzen auch reelle Zahlen verarbeiten kann. Grundsätzliches Merkmal einer reellen Zahl ist, dass sie über einen ganzen und einen gebrochenen Teil verfügt, die durch das Komma (im englischen Sprachraum durch den Punkt) getrennt sind; im Dezimalsystem sprechen wir hier vom „Dezimalbruch“. Eine andere Form der Darstellung ist der („gemeine“) Bruch. Letztere ermöglicht (im Rahmen der verfügbaren Auflösung) in vielen Fällen, in denen die File: Date: Zahlensysteme.Doc 01.04.2009 Seite 8 von 12 © Lothar Müller 2004...2009 Informationen zu Grundlagen digitaler Systeme Zahlensysteme, Digitalarithmetik Schreibweise als Dezimalbruch scheitert, eine genaue Darstellung (Beispiel: 1/3 und 0,33333...). Allerdings entziehen sich viele reelle Zahlen in beiden Formen einer exakten Darstellung (Beispiel: ). Bevor auf die Darstellung reeller Zahlen in digitalen Rechenwerken eingegangen wird, soll zunächst wie zuvor bereits bei den ganzen Zahlen die Umrechnung zwischen verschiedenen Zahlensystemen behandelt werden. 6.2 Umrechnung zwischen verschiedenen Zahlensystemen Bei der Umrechnung gebrochener Zahlen werden für Vor- und Nachkommateil unterschiedliche Regeln angewandt. Für den Vorkommateil gelten dabei dieselben Regeln wie für ganze Zahlen. Die Regeln für die Umwandlung des Nachkommateils werden im Folgenden dargestellt. 6.2.1 Umrechnung von Systemen mit der Basis n in das Dezimalsystem Die Umrechnung erfolgt wie bei den ganzen Zahlen über die Ermittlung der (dezimalen) Werte der einzelnen Ziffern der Ausgangszahl mit der Basis n und die nachfolgende Addition dieser Werte. Dabei sind beim Nachkommateil die Potenzen zur Zahlenbasis negativ. Beispiele für n = 2 und n = 16: 0,10112 6.2.2 dezimal ergibt: -4 1•2 = -3 1•2 = -2 • 0 2 = -1 1•2 = Summe: 0,0625 0,125 0 0,5 0,6875 0,E8016 dezimal ergibt: -3 0 • 16 = 0 -2 8 • 16 = 0,03125 -1 • 14 16 = 0,875 Summe: 0,90625 Umrechnung vom Dezimalsystem in Systeme mit der Basis m Hier erfolgt die Umrechnung des Nachkommateils durch Multiplikation der dezimalen Ausgangszahl mit der Basis m des Zielsystems und linksbündige Aufreihung der auftretenden Vorkommastellen. Die Multiplikation wird mit den auftretenden Resten fortgesetzt, bis der Rest 0 wird. Beispiel für n = 2: 0,687510 binär ergibt: 0,6875 • 2 = 1 Rest 0,375 0,375 • 2 = 0 Rest 0,75 0,75 • 2 = 1 Rest 0,5 0,5 • 2 = 1 Rest 0 1 10 101 1011 Fertig! Das Ergebnis ist also 0,10112. In vielen Fällen wird der Rest niemals 0; dann kann die Zahl nicht exakt umgerechnet werden bzw. es muss eine Darstellung als Periode gewählt werden. Beispielsweise ergibt die Umrechnung von 0,110 in das Binärsystem 0,00011001100110011...2 oder in periodischer Schreibweise 0,000112. 6.2.3 Umrechnung von einem System mit der Basis n in ein System mit der Basis m Diese Umrechnung erfolgt wie bei ganzen Zahlen am sinnvollsten in zwei Schritten: - zunächst Umrechnung vom System mit der Basis n in das Dezimalsystem - anschließend Umrechnung vom Dezimalsystem in das Zielsystem mit der Basis m. Dies gilt nicht, wenn beide Basen 2 oder eine Potenz von 2 sind. Denn in diesem Fall können wir über das Binärsystem und einfaches Umgruppieren der Binärziffern eine sehr einfache Umrechnung vornehn men, weil jede Ziffer eines Systems mit der Basis 2 genau n Binärstellen entspricht. Das Umgruppieren File: Date: Zahlensysteme.Doc 01.04.2009 Seite 9 von 12 © Lothar Müller 2004...2009 Informationen zu Grundlagen digitaler Systeme Zahlensysteme, Digitalarithmetik erfolgt ausgehend vom Dezimalkomma nach beiden Seiten. Eine linksseitig möglicherweise auftretende unvollständige Gruppe wird dabei durch Einfügen führender Nullen ergänzt, eine rechtsseitig auftretende durch Anhängen nachgeordneter Nullen. Beispiel einer Umrechnung der Hexadezimalzahl D7,4B16 in das Oktalsystem: 1. Umrechnung hexadezimal binär: D 7 , 4 B 1101 0111 , 0100 1011 011 010 111 , 010 010 110 (jede HEX-Ziffer entspricht 4 Binärziffern) 2. Umgruppieren zu 3er-Gruppen: (Vorkomma: rechtsbündig; Nachkomma: linksbündig) 3. Umrechnung binär oktal: 3 2 7 , 2 2 6 (jede Oktalziffer entspricht 3 Binärziffern) Das Ergebnis ist also 327,2268. 6.3 Reelle Zahlen in der Digitaltechnik 6.3.1 Fest- und Gleitkommazahlen Die Darstellung reeller Zahlen kann in einem digitalen Rechenwerk zweckmäßigerweise nur als „Binärbruch“ erfolgen, indem die Zahl nach Vor- und Nachkommateil getrennt wird. Dabei wird zwischen Festund Fließ- oder Gleitkommadarstellung unterschieden. Bei der Festkommadarstellung (fixed point numbers) wird für Vor- und Nachkommateil der Zahl jeweils eine bestimmte, im Rahmen der vorhandenen Rechnerarchitektur unveränderliche Anzahl von Binärstellen vorgesehen. Dies erlaubt einen relativ einfachen Aufbau des Rechenwerks, verhindert aber oft eine effiziente Nutzung der verfügbaren Ressourcen, wenn Vor- oder Nachkommateil ihren jeweiligen Wertebereich überschreiten. Die Festkommadarstellung stößt schnell an ihre Grenzen, wenn entweder besonders große oder besonders kleine Zahlen verarbeitet werden müssen. Im ersten Fall begrenzen die für den Vorkommateil vorgesehenen Binärstellen den Wertebereich, ohne dass die Stellen des Nachkommabereichs sinnvoll genutzt werden können. Im zweiten Fall ist es umgekehrt. Deshalb werden Festkommarechner bevorzugt in Fällen eingesetzt, in denen die Datenstrukturen vorab bekannt und relativ konstant sind, z.B. in der Signalanalyse. Gleitkommarechner kommen zum Einsatz, wenn größere Wertebereiche abgedeckt werden müssen oder wenn wegen der Universalität des Rechners vorab keine sinnvolle Aussage zur vorgesehenen Verwendung gemacht werden kann; dies gilt beispielsweise für den PC, dessen Prozessor eine Recheneinheit für Gleitkommazahlen enthält. Dagegen bietet die Gleitkommadarstellung (floating point numbers) hier eine wesentlich größere Flexibilität, allerdings auf Kosten eines aufwendigeren Rechenwerkes. Bei der Gleitkommadarstellung liegt die Position des Kommas nicht fest, sondern kann je nach Bedarf „verschoben“ werden, so dass eine Anpassung an die vorliegenden Zahlen in Hinblick auf ihren Werteumfang und die erforderliche Auflösung bzw. Genauigkeit möglich ist. Die Darstellung von Gleitkomazahlen in realen Rechnersystemen war über einen langen Zeitraum nicht einheitlich definiert. Stattdessen gab es die verschiedensten Formate, die sich in der Regel nach den Hardwarestrukturen der jeweils vorliegenden Schaltkreise richteten. Damit war es nicht möglich, Programme plattformunabhängig zu gestalten. 1) Erst in den 1980er Jahren wurden die heute allgemein üblichen Formate nach IEEE 754 definiert. Deren wichtigste sollen im Folgenden dargestellt werden. 1 IEEE File: Date: Institute for Electrical and Electronic Engineers (ungefähr vergleichbar dem VDE in Deutschland) Zahlensysteme.Doc 01.04.2009 Seite 10 von 12 © Lothar Müller 2004...2009 Informationen zu Grundlagen digitaler Systeme Zahlensysteme, Digitalarithmetik 6.3.2 Darstellung von Gleitkommazahlen nach IEEE 754 a) Allgemeine Form der Darstellung einer Gleitkommazahl: Die allgemeine Form der Darstellung einer Gleitkommazahl ist: z = ±m • b±e mit z m b e = Zahl = Mantisse = Basis = Exponent. Sowohl Mantisse als auch Exponent sind vorzeichenbehaftet. b) Vereinbarungen und Vereinfachungen: Das Vorzeichen der Mantisse wird durch den binären Wert s (sign) dargestellt s = 0: positiv s = 1: negativ Die Basis b des Exponenten wird nicht dargestellt. Sie ist immer 2 (Binärsystem!). Die Mantisse wird normalisiert, so dass die führende 1 direkt vor dem Komma steht. Damit kann diese 1 in der Darstellung entfallen (es gibt im Binärsystem nur 2 Ziffern). Das Komma kann ebenfalls entfallen; damit bleibt nur der Nachkommateil der Mantisse übrig. Er wird fraction f genannt. Das Vorzeichen des Exponenten wird nicht explizit angegeben. Stattdessen wird der Exponent mit einem Offset beaufschlagt (biased exponent), d.h. der darzustellende Wert des Exponenten ergibt sich aus der Summe von Exponent und Offset. Diese wird als characteristic c bezeichnet. Die größten und kleinsten Werte des für die characteristic verfügbaren Zahlenbereichs werden für spezielle Kodierungen reserviert (s.u.). Daraus ergibt sich die folgende c) Form der Darstellung einer Gleitkommazahl nach IEEE 754: z = (-1)s • 1.f • 2c-o mit z s f c o = Zahl = sign = fraction = characteristic = offset. (Vorzeichen) (Nachkommateil der normalisierten Mantisse) d) Formate der Darstellung einer Gleitkommazahl nach IEEE 754: Zum Zeitpunkt der Definition der Gleitkommazahlen nach IEEE754 waren 32 Bit-Rechnersysteme von verschiedenen Herstellern verfügbar. Deshalb wurden in den Normungsprozess keine kleineren Formate als 32 Bit einbezogen. Im einzelnen wurden die folgenden drei Formate definiert: single precision double precision extended precision File: Date: Zahlensysteme.Doc 01.04.2009 32 Bit 64 Bit 80 Bit. Seite 11 von 12 © Lothar Müller 2004...2009 Informationen zu Grundlagen digitaler Systeme Zahlensysteme, Digitalarithmetik Die folgende Darstellung zeigt die Verteilung der einzelnen Komponenten einer floating point number auf die in den einzelnen Formaten jeweils zur Verfügung stehenden Bits: Format Bit sign [s] characteristic [c] fraction [f] offset [o] single precision 32 1 8 23 12710 (7F16) double precision 64 1 11 52 102310 (3FF16) extended precision 80 1 15 64 (mantisse!) 1638310 (3FFF16) Anmerkung: Beim Format extended precision ist abweichend von den anderen Formaten nicht die fraction, sondern die mantisse angegeben, also inklusive führender 1. Dies hat seinen Grund darin, dass dieses Format zum Zeitpunkt der Normung bei vielen mathematischen Coprozessoren verbreitet war und quasi nachträglich genormt werden sollte. Beispiel der Darstellung einer Zahl im IEEE 754-Format (single precision): Ausgangszahl: z = -37,7510 Umwandlung in binär: = -100101,112 • 20 Normalisierung: = -1,00101112 • 25 Codierung des Vorzeichens: s = 12 Codierung des Exponenten, dazu zunächst Umwandlung in binär: e = 1012 plus Offset: o = 011111112 ergibt characteristic: c = 100001002 Übernahme der fraction: f = 00101112 Ergebnis (zur besseren Übersicht gruppiert nach Funktionen und innerhalb derer in Blöcken à 4 Bit): z= 1 (s) 1000 0100 (c) 0010 1110 0000 0000 0000 000 (f) e) Spezielle Formate: Im beschriebenen Format können zwar sehr kleine (und sehr große) Zahlen dargestellt werden, nicht jedoch die Zahl 0. Dazu müsste die Mantisse 0 werden, was sie wegen der (nicht dargestellten) führenden 1 nicht werden kann. Abhilfe schafft die folgende Vereinbarung: characteristic c = 0 und fraction f = 0 bedeutet: Zahl z = 0. Als weitere Spezialfälle seien hier erwähnt: characteristic c = 111...1 und fraction f = 0 bedeutet: 6.3.3 Zahl z = ± (s bestimmt Vorzeichen). Rechnen mit Gleitkommazahlen Das Rechnen mit Gleitkommazahlen gestaltet sich ungleich schwieriger als mit ganzen oder Festkommazahlen. Es soll hier nur qualitativ dargestellt werden. Zum Addieren bzw. Subtrahieren müssen zunächst die Exponenten beider Zahlen angeglichen werden. Dazu wird der Exponent der kleineren Zahl soweit erhöht, dass er gleich dem der größeren Zahl wird. Die Mantisse wird entsprechend nach rechts verschoben. Anschließend werden beide Mantissen addiert bzw. voneinander subtrahiert. Abschließend wird das Ergebnis normalisiert, so dass wieder eine dem IEEE754-Format entsprechende Zahl entsteht. Beim Multiplizieren bzw. Dividieren werden die Mantissen der entsprechenden Operation unterzogen, wobei auch das Vorzeichen des Ergebnisses ermittelt wird. Die Exponenten werden addiert bzw. subtrahiert. Das Ergebnis wird wieder normalisiert. Bei allen genannten Berechnungen können Rundungsfehler entstehen, deren Behandlung ebenfalls in IEEE 754 festgelegt ist. File: Date: Zahlensysteme.Doc 01.04.2009 Seite 12 von 12 © Lothar Müller 2004...2009