EF Informatik Gymnasium Burgdorf Nicolas Ruh Rechnen mit Bits & Bytes Addition auf Binär Für das Addieren von Binärzahlen gibt es 4 Regeln, die eigentlich recht unspektakulär sind: 0 0 1 1 + + + + 0 1 0 1 = = = = 0 1 1 0, Übertrag 1 Beispiel: + 0 0 1 0 0 0 Übertrag -> Ergebnis-> 0 1 0 0 0 1 0 1 1 1 0 1 1 0 1 1 0 0 1 1 Eigentlich funktioniert also auch das genau wir mit Dezimalzahlen. Probiere das aus und überprüfe die Ergebnisse durch Umrechnung ins Dezimalsystem (Tabulatoren zwischen Ziffern): Binär + 1 0 0 0 0 0 0 1 Dezimal 1 1 0 1 1 0 0 1 Übertrag -> Ergebnis-> + 1 0 1 0 0 1 0 0 1 0 1 0 1 1 1 1 Übertrag -> Ergebnis-> + 1 0 1 0 1 0 1 0 0 1 0 1 0 1 1 1 Übertrag -> Ergebnis-> Was im letzten Beispiel passiert ist, nennt sich „overflow“ (Überlauf). Schau dir die dezimale Version an und formuliere allgemein: 1. Was ist ein overflow und unter welchen Umständen tritt dieses Phänomen auf? 2. Und binäre Festkommazahlen? Was ergibt 010.010002 + 01111.0002 (der Punkt zeigt an, wo der fraktionale Teil beginnt)? Quellen: Richard Jones, www.ib-Computing.com Garmann, http://projekte.gymnasium-odenthal.de/ EF Informatik Gymnasium Burgdorf Nicolas Ruh Hexadezimal addieren Und jetzt dasselbe mit Hexadezimalzahlen: (falls dir die Finger ausgehen: 0 1 2 3 4 5 6 7 8 9 A B C D E F) Hexadezimal + 0 0 0 0 0 0 Dezimal C D Übertrag -> Ergebnis-> + 1 6 4 8 3 Übertrag -> Ergebnis-> + F 0 F 3 9 9 0 D Übertrag -> Ergebnis-> 3. Gibt es eine einfache Art, Hexadezimalzahlen (z.B. das letzte Ergebnis) in Binärzahlen umzurechen (16 ist schliesslich 24)? Welche? Subtrahieren Was, wenn wir subtrahieren wollen? Ganz einfach: 127 – 16 entspricht schliesslich 127 + (-16). Man muss also lediglich dafür sorgen, dass negative Zahlen repräsentiert werden können – das „most significant bit“ steht also für den negativen Zahlenwert (bei einer 1 Byte signed Integer repräsentiert also das erste der 8 Bit die -128). Für solche Repräsentationen wird aus der Subtraktion also ganz einfach eine Addition. Ausprobieren: Binär (signed Int) Dezimal + 1 2 7 -(1 6) Übertrag -> Ergebnis-> 1 1 1 Möglicherweise muss man hierzu zuerst die positive Zahl ins Negative verkehren. Dazu gibt es eine einfache Methode: man verwandelt jedes Bit der positiven Binärzahl in sein Gegenteil und addiert 1: Das Einerkomplement: Beispiel: Das Zweierkomplement: Das Einerkomplement einer Binärzahl entsteht, indem jedes einzelne Bit „gekippt“ (to flip) wird, d. h. aus 0 wird 1 und aus 1 wird 0. aus 0011 1001 entsteht das Einerkomplement 1100 0110 Das Zweierkomplement einer Binärzahl entsteht, indem zum Einerkomplement der Binärzahl die Zahl 1 hinzuaddiert wird Quellen: Richard Jones, www.ib-Computing.com Garmann, http://projekte.gymnasium-odenthal.de/ EF Informatik Gymnasium Burgdorf Beispiel: + = Nicolas Ruh 1100 0110 0000 0001 1100 0111 4. Überprüfe im Dezimalsystem, dass 1100 0111 wirklich der 0011 1001 mit umgekehrtem Vorzeichen entspricht. 5. Schreibe 9610 binär (signed 8-Bit Integer) und ermittle daraus die binäre Form von -9610. Punktrechnung im Binärsystem Bis jetzt haben wir uns mit Strichrechnungen im Binärsystem beschäftigt und wir haben festgestellt, dass Addition genauso funktioniert wie im Dezimalsystem (nur einfacher, da wir es lediglich mit zwei möglichen Ziffern/Zuständen zu tun haben), und dass die Subtraktion im Prinzip nichts anderes ist, als eine Addition vom Minuenden mit dem Zweierkomplement des Subtrahenden. In der Grundschule lernt man, dass die Multiplikation eigentlich nichts anderes ist, als eine groooße (mehrfache) Addition, und die Division nichts anderes ist, als eine grooooße Subtraktion. Wieder können wir das Verfahren direkt übertragen - allerdings liegt im Binärsystem mehr der Schwerpunkt auf dem Addieren als auf dem Multiplizieren, wie das folgende Beispiel zeigt: Beispiel: das Produkt von 0000 10012 und 0010 01112 als vorzeichenlose (unsigned) Binärzahl Dezimal Übertrag -> Ergebnis-> 9 * 23 18_ 27 _ _ 1__ ______ 207 Binär 00001001 * 00010111 00001001____ 00001001__ 00001001_ 00001001 11_____ ___________________ 0000000011001111 Bei der Multiplikation entstehen so bis zu acht Summanden, die anschließend aufaddiert werden müssen – dafür ist die Addition aber sehr einfach. Das einzige Problem mit vielen Summanden ist eigentlich, dass es zu Überträgen kommen kann, die grösser als 1 sind. Für Menschen ist dieses Problem mit ein wenig Kopfrechnen zu lösen, der Computer löst es schlicht, indem er die ersten beiden Summanden addiert, dann zum Ergebnis den dritten Summanden addiert, etc. 6. Berechne 710 * 2510 im Dezimal- und Binärsystem (am besten auf einem Blatt Papier) Es ist wenig überraschend, dass man auf sehr ähnliche Weise auch die Division als eine Serie von Subtraktionen ausdrücken kann (man rechnet jeweils mit dem verbleibenden Rest weiter), die sich wiederum recht einfach in Additionen überführen lassen (s. oben). Die Details dieser Rechenoperation wollen wir uns aber sparen. Quellen: Richard Jones, www.ib-Computing.com Garmann, http://projekte.gymnasium-odenthal.de/