Technische Informatik I – Rechner & Zahlen

2. Rechnen im Binärsystem

Rechnen im Binärsystem: Addition, Subtraktion über das Zweierkomplement und negative Binärzahlen.

Und nun: NEGATIVE Binärzahlen

Einleitung Wertebereich / negative Ganzzahlen

Natürlich können wir nicht einfach ein Minuszeichen vor eine duale Zahl stellen, dies würde ja wieder Speicherplatz benötigen. Da wir nur die Information 0 und 1 speichern wollen, haben wir also die Möglichkeit mit einer 0 oder 1 zu kennzeichnen ob wir eine Zahl positiv oder negativ interpretieren. Dazu haben wir uns im Teil Subtraktion ja schon mit der Bildung von Komplementen befasst. Wir entwickeln die negativen Zahlen in drei Schritten.

 

Positive Ganzzahlen

Die bisherigen Überlegungen lassen uns nur positive Ganzzahlen darstellen. Die kleinste Zahl ist 0, die größte Zahl hängt von der zur Verfügung stehenden Speichermenge ab. Wir haben uns bisher auf ein Byte (8bit = 0-256)  beschränkt. Normalerweise werden aber je nach Programmiersprache mehrere Bytes zu einer Speicherstelle zusammengefasst. Typischerweise sind das zwei oder vier Bytes. Das bedeutet, dass die größten darstellbaren Dezimalzahlen dann 65535 beziehungsweise 4294967295 sind.
 
 

Negative Ganzzahlen -> 1. Versuch

Der nächste Schritt ist jetzt die Einführung negativer Zahlen. Dies erscheint recht einfach, ist jedoch ziemlich schwer. Ich werde die negativen Zahlen in drei Schritten erklären. Bitte lesen Sie mindestens bis zum dritten Versuch, denn erst dort werden die "richtigen" negativen Zahlen beschrieben.
Wir beschränken uns der Einfachheit halber wieder auf ein Byte. Selbstverständlich ist das Prinzip wieder auf mehrere Bytes als Speicherbereich übertragbar.
Wir kennzeichnen negative Zahlen einfach mit einem führenden Bit. Diese Bits nennt man manchmal auch "flags".
Aus 1 = 00000001 wird dann -1 = 10000001.
Aus 17 = 00010001 wird dann -17 = 10010001.
 

Negative Ganzzahlen -> 2. Versuch

Die Version 1 der negativen Ganzzahlen hat jedoch einen entscheidenden Nachteil. Bei den positiven Ganzzahlen erreiche ich durch die Addition von 1 jeweils die nächst größere Zahl. Bin ich bei der maximalen Zahl angekommen, so führt die Addition von 1 durch den "Überlauf" (Überschreitung der Speichergröße) dazu, dass ich wieder am unteren Ende ankomme. Also 11111111+00000001=00000000

Bei negativen Zahlen laut Version 1 führt die Addition von 1 jedoch nicht - mathematisch richtig - zur größeren Zahl, sondern zur kleineren. Beispiel: 10000001 + 00000001 = 10000010 dies ist jedoch mathematisch falsch, denn in dezimaler Schreibweise steht hier -1 + 1 = -2 !!! Aus diesem Grund stellt man negative Zahlen nicht nur durch die Kennzeichnung mit dem ersten Bit dar, sondern man verwendet dazu die oben schon eingeführte Komplementbildung.

Das Einerkomplement 

Durch die Bildung des Einerkomplementes besitzt unser Wertebereich plötzlich zwei Nullen, nämlich 00000000 und 11111111. Addiere ich zu -1 = 11111110 die 1 = 00000001, so bekomme ich 11111111. D. h. wir haben noch einen logischen Fehler in unseren Überlegungen. Diesen Fehler bessern wir durch die Bildung des Zweierkomplementes aus. Das Zweierkomplem

Das Zweierkomplement 

Diesen Fehler bessern wir durch die Bildung des Zweierkomplementes aus. Das Zweierkomplement der Null ergibt dann wieder Null. Aus 00000000 wird im Einerkomplement 11111111 und durch die Addition von 00000001 und den Überlauf wieder zu 00000000.

 
 
 

Negative Ganzzahlen -> 3. Versuch

Geschafft! Die negativen Zahlen werden also durch Bildung des Zweierkomplementes dargestellt. Hier ein paar Beispiele:
1 = 00000001 wird zu -1 = 11111111
5 = 00000101 wird zu -5 = 11111011
17 = 00010001 wird zu -17 = 11101111
Ich kann also immer noch am ersten Bit erkennen, ob eine Zahl negativ oder positiv ist.
 

Wertebereich von negativen Ganzzahlen

Nehme ich ein Byte als Speichergrenze, so bekomme ich folgende interessante Zahlen
00000000 = 0
01111111 = 127
10000000 = -128
Mein ehemaliger Wertebereich von 0 bis 255 verändert sich also zu -128 bis +127. Auch hier habe ich wieder insgesamt 256 verschiedene Zahlen. Nur unsere Interpretation der Zahlen ändert sich.

Übung - Subtraktion von Binärzahlen

Aufgabe:
Subtrahiere die beiden Binärzahlen voneinander und gib den Rechenweg an.

a) 
 1001 1001 0101 1101
-         101 1101
b)
1111 1010 0101 1101
-1101 0111 1010 1001
c)
1111 0110 0000 1000
- 111 0000 1011 0101

Lösung - Subtraktion von Binärzahlen

Aufgabe:
Subtrahiere die beiden Binärzahlen voneinander und gib den Rechenweg an.

a) 
Zahl 1 = 1001 1001 0101 1101
Zahl 2 =          101 1101

Zahl 2 mit Nullen auffüllen -> 0000 0000 0101 1101
Zahl 2 zu Einerkomplement -> 1111 1111 1010 0010
Einerkomplement zu Zweierkomplement (+1)
-> 1111 1111 1010 0011

Zahl 1 + Zweierkomplement
1001 1001 0101 1101
+1111 1111 1010 0011
--------------------
=1001 1001 0000 0000
Hinweis: Falls am Ende ein Übertrag übrig bleibt wird dieser Ignoriert.

b)
Zahl 1 = 1111 1010 0101 1101
Zahl 2 = 1101 0111 1010 1001

Zahl 2 mit Nullen auffüllen -> 1101 0111 1010 1001
Zahl 2 zu Einerkomplement -> 0010 1000 0101 0110
Einerkomplement zu Zweierkomplement (+1)
-> 0010 1000 0101 0111

Zahl 1 + Zweierkomplement
1111 1010 0101 1101
+0010 1000 0101 0111
--------------------
=0010 0010 1011 0100

c)
Zahl 1 = 1111 0110 0000 1000
Zahl 2 = 111 0000 1011 0101

Zahl 2 mit Nullen auffüllen -> 0111 0000 1011 0101
Zahl 2 zu Einerkomplement -> 1000 1111 0100 1010
Einerkomplement zu Zweierkomplement (+1)
-> 1000 1111 0100 1011

Zahl 1 + Zweierkomplement
1111 0110 0000 1000
+1000 1111 0100 1011
--------------------
=1000 0101 0101 0011

Übung 2 - Binärzahlen

a) Addition
  11002 + 10012   11101012 + 101111012   10110112 + 10001102
 
b) Subtraktion
  1101112 - 110102   111101002 - 10111102   1011011102 - 11012

Übung 2 - Lösungen

a) Addition
  101012   1001100102   101000012
 
b) Subtraktion
  111012   100101102   1011000012