Rechnergrundlagen SS 2007 3. Vorlesung Inhalt • Zahlensysteme • Binäre Darstellung von Integer-Zahlen – – – – Vorzeichen-Betrag Binary Offset 1er-Komplement 2er-Komplement • Addition und Subtraktion binär dargestellter Zahlen • Carry und Overflow • Little Endian / Big Endian Zahlensysteme Elementare Zahlenmengen • Natürliche Zahlen (positive ganze Zahlen) • Ganze Zahlen (positive und negative ganze Zahlen) • Rationale Zahlen (gebrochene Zahlen) • Reelle Zahlen (gemischt gebrochene Zahlen) Zahlen in Rechnern • Integer-Zahlen (natürliche und ganze Zahlen) • Festkomma-Zahlen (rationale und reelle Zahlen mit eingeschränktem Wertebereich) • Gleitkomma-Zahlen (rationale und reelle Zahlen mit erweitertem Wertebereich) Wertebereiche von IntegerZahlen • 8 Bit: -128 … 127 • 16 Bit: -32768 … 32767 • 32 Bit: -2 147 483 648 … 2 147 483 647 • 64 Bit: Dezimalzahl mit 19 Ziffern, ca. 1019 Was ist die Differenz? N Z = ∑ xiY i =0 i a= ∞ ∑ zb i =−∞ i i Darstellung positiver Zahlen allgemeine Form: a= ∞ ∑ i =−∞ zi bi Verwendung von n+1 Bits für Vorkommastellen und m Bits für Nachkommastellen: a= i =n ∑ i =− m zi bi n −1 −1 = znb + zn −1b ... z1b + z0 + z−1b + ... z− mb n −m Es ist Konvention, die Ziffern mit absteigendem Index i als Liste darzustellen und zwischen z0 und z-1 ein Komma einzufügen. Beispiel Verwendung von n+1 Bits für Vorkommastellen und m Bits für Nachkommastellen: a= i =n ∑ i =− m zi bi = znb n + zn −1b n −1... z1b + z0 + z−1b −1 + ... z− mb − m −3 −1 1001,1012 = 2 + 2 + 2 + 2 = 0,125 + 0,5 + 1 + 8 = 9,62510 0 3 Verschiedene Darstellungen von Integer-Zahlen Am Beispiel: 4 bit Integer-Zahlen (ohne Vorzeichen) Integer-Zahlen (Signed Magnitude) Most Significant Bit (MSB) definiert das Vorzeichen. Vorzeichenbit muss gesondert ausgewertet werden. Es existiert eine positive und eine negative Darstellung der Null. Wertebereich: −2 n −1 +1 ≤ Z ≤ 2 n −1 −1 Integer-Zahlen (Binary Offset) Der kleinst mögliche Wert wird mit 0000… und der größt mögliche Wert wird mit 1111… dargestellt. Wertebereich: −2 n −1 ≤Z ≤2 n −1 −1 Integer-Zahlen (1er-Komplement) Most Significant Bit (MSB) definiert das Vorzeichen. positive Zahl: MSB = 0, 3 niederwertigen Bits werden wie gewohnt ausgewertet negative Zahl: MSB = 1, 3 niederwertigen Bits werden invertiert und anschließend ausgewertet Wertebereich: −2 n −1 +1 ≤ Z ≤ 2 n −1 −1 Beispiel 1er Komplement -3 soll binär als 1er Komplement dargestellt werden binäre Darstellung des Betrags (3)10 = (0011)2 Setzen des Vorzeichens und Komplement der Bits (-3)10 = (1100)2-1k Beispiel 1er Komplement a=(1001,0011)2-1k MSB =1 negative Zahl Komplement aller Ziffern muss gebildet werden |a| = (0110,1100)2 |a| = (6,75)10 Vorzeichen hinzufügen a = (-6,75)10 Integer-Zahlen (2er-Komplement) Most Significant Bit (MSB) definiert das Vorzeichen. positive Zahl: MSB = 0, 3 niederwertigen Bits werden wie gewohnt ausgewertet negative Zahl: MSB = 1, 3 niederwertigen Bits werden invertiert, 1 addiert und anschließend ausgewertet Wertebereich: −2 n −1 ≤Z ≤2 n −1 −1 Vorteile 2er-Komplement Darstellung • Es existiert nur eine Null. • Das Vorzeichenbit muss für Addition und Subtraktion nicht gesondert ausgewertet werden. • Signifikante Vereinfachung der Berechnung. • 2er-Komplement wird in der Praxis fast ausschließlich eingesetzt. Addition/Subtraktion 1+0, bzw. 0+1 Ergebnis: 1, kein Übertrag (Carry) 1+1 Ergebnis: 0, Übertrag 1 1-0 Ergebnis: 1, kein Übertrag 0-1 Ergebnis: 1, Übertrag 1 1-1 Ergebnis: 0, kein Übertrag Übertrag (Carry, C, CY) Ein Übertrag entsteht, wenn bei Operationen mit nur positiven Zahlen der Wertebereich überschritten wird. Beispiel 2er-Komplement Zu berechnen: (6)10-(1)10 = (6)10 + (-1)10 = (5)10 (6)10: (0110)2 -1: Betrag 001, invertiert 110, 1 addiert 111 (-1)10: (1111)2-2k 0 1 1 0 + 1 1 1 1 C 1 1 0 1 0 1 0 1 Ergebnis: (0101)2-2k = (5)10 Beispiel 2er-Komplement Zu berechnen: (4)10 + (5)10 = (9)10 (4)10: (0100)2 0 1 0 0 + 0 1 0 1 C 1 0 0 1 0 0 1 (5)10: (0101)2 Ergebnis: (1001)2-2k = (-7)10 Overflow Beispiel 2er-Komplement Zu berechnen: (3)10-(6)10 = (-3)10 (3)10: (0011)2 -6: Betrag 110, invertiert 001, 1 addiert 010 (-6)10: (1010)2-2k 0 0 1 1 101, invertiert 010, 1 addiert 011 + 1 0 1 0 0 0 1 0 1 1 0 1 Ergebnis: (1101)2-2k = (-3)10 Überlauf (Overflow, OV) Ein Überlauf entsteht, wenn bei Operationen von 2er-Komplement-Zahlen der Wertebereich überschritten wird. Ein Überlauf liegt dann vor, wenn beide Summanden ein gleiches Vorzeichen haben und das Ergebnis ein anderes. Beispiel 2er-Komplement Zu berechnen: (-6)10-(7)10 = (-6)10 + (-7)10 = (-13)10 (-6)10: (1010)2-2k 1 0 1 0 + 1 0 0 1 1 0 0 0 1 0 0 1 1 (-7)10: (1001)2-2k Ergebnis: (0011)2-2k = (3)10 Overflow OV-Tabelle Addition 2er-Komplement Summand A B + + + + + + - + + - - Summe Y + Flag OV 0 + + 1 0 - 0 0 0 + - 1 0 Carry (VZ) Cin Cout 0 0 1 0 1 1 0 1 0 0 0 1 0 1 1 1 Little Endian – Big Endian Bei der Interpretation, z.B. einer Integer-Zahl, ist zu unterscheiden, ob das least significant Byte an der höchsten Adresse („big endian“) oder der niedrigsten Adresse („little endian“) gespeichert wird. Beispielsweise Speicherung eines 4 Byte Integer: MSB Æ Byte3 Byte2 Byte1 Byte0 Å LSB Speicheradresse BasisAdresse+0 BasisAdresse+1 BasisAdresse+2 BasisAdresse+3 Little Endian Byte0 Byte1 Byte2 Byte3 Little Endian: PC (Intel, AMD), DEC, … Big Endian Byte3 Byte2 Byte1 Byte0 Big Endian: Apple (Motorola), Sun, … Beispiel: -96 000 0000 0000 0000 128 64 32 16 8 4 2 1 FF A0 A0 FF 000 0000 0110 0000 Betrag 111 1111 1001 1111 1er-Komplement 111 1111 1010 0000 2er-Komplement 1111 1111 1010 0000 Vorzeichen Hex-Editor auf einem PC (Intel) Hex-Darstellung in einem PC 4F 00 FF FF A1 FF Interpretation als signed 2 Byte Integer