Addition, Subtraktion, Multiplikation und Division funktionieren auch im Binärsystem. Die Logik entspricht der Dezimalrechnung: gleiche Stellen werden ausgerichtet, bei Bedarf wird von rechts nach links gearbeitet, und Überträge, Entleihungen sowie Teilergebnisse werden berücksichtigt. Der Unterschied besteht darin, dass Basis 2 nur die Ziffern 0 und 1 besitzt.
Das NIST definiert ein Bit als Binärziffer mit dem Wert 0 oder 1. In einer geordneten Bitfolge steht das höchstwertige Bit links und das niederwertigste rechts. Jede Stelle besitzt das doppelte Gewicht der unmittelbar rechten Stelle.
Erste Regel: gleiche Stellenwerte ausrichten
Die Spalte 2⁰ muss unter 2⁰ stehen, 2¹ unter 2¹ und so weiter. Das entspricht dem Ausrichten von Einern, Zehnern und Hundertern im Dezimalsystem.
Führende Nullen verändern eine vorzeichenlose Zahl nicht. 1101 und 01101 bedeuten beide 13. Sie helfen bei der Ausrichtung und bei Wörtern fester Breite.
Die vier Rechenarten folgen der Dezimallogik, verwenden jedoch nur 0 und 1 und Stellenwerte als Zweierpotenzen.
Binäraddition: Grundfälle
- 0 + 0 = 0;
- 0 + 1 = 1;
- 1 + 0 = 1;
- 1 + 1 = 10₂: 0 schreiben und 1 übertragen;
- 1 + 1 + 1 = 11₂: 1 schreiben und 1 übertragen.
1 + 1 = 10₂, weil der Wert zwar dezimal 2 ist, im Binärsystem aber keine einzelne Ziffer 2 existiert. Der Wert wird als eine Einheit in der nächsten Spalte und null in der aktuellen Spalte geschrieben.
Beispiel: 1011 + 1101
1011 + 1101 ------- 11000- 1 + 1 = 10: 0 schreiben, 1 übertragen;
- 1 + 0 + Übertrag = 10;
- 0 + 1 + Übertrag = 10;
- 1 + 1 + Übertrag = 11: 1 schreiben, letzten Übertrag links ergänzen.
Das Ergebnis ist 11000₂. Dezimal gilt 11 + 13 = 24.
Ergibt eine Spalte dezimal 2 oder 3, entstehen eine Ergebnisziffer und ein Übertrag nach links.
Wohin geht der Übertrag?
Der Übertrag gehört immer in die nächste linke Spalte, da diese das doppelte Gewicht besitzt. Zwei Einheiten in 2⁰ werden als 0 × 2⁰ + 1 × 2¹ geschrieben. Der neue Wert 1 wird deshalb in der Spalte 2¹ addiert.
Bleibt nach der linken Spalte ein Übertrag übrig, wird er bei variabler Breite zur neuen führenden Ziffer.
Jeder Übertrag kommt über die unmittelbar linke Spalte; der letzte wird zur neuen führenden Ziffer.
Binärsubtraktion: eine Entleihung entspricht 10₂
- 0 - 0 = 0;
- 1 - 0 = 1;
- 1 - 1 = 0;
- bei 0 - 1 muss links entliehen werden.
Im Dezimalsystem werden aus einer entliehenen Zehnereinheit zehn Einer. Im Binärsystem ist eine Einheit der linken Spalte zwei Einheiten der aktuellen Spalte. Der entliehene Wert lautet daher 10₂, sodass 10₂ - 1₂ = 1₂.
Beispiel: 1101 - 0110
1101 - 0110 ------- 0111Das Ergebnis 111₂ ist dezimal 7. Kontrolle: 13 - 6 = 7.
Ist das unmittelbar linke Bit 0, setzt sich die Entleihung weiter nach links fort, bis eine 1 gefunden wird. Der Vorgang entspricht einer Dezimalsubtraktion über mehrere Nullen.
Subtraktion als Addition des Zweierkomplements
Bei fester Wortbreite kann Hardware dieselbe Additionsschaltung wiederverwenden:
A - B = A + Zweierkomplement(B)
Das Zweierkomplement entsteht durch Invertieren aller Bits und anschließendes Addieren von 1. Auf vier Bits ist das Zweierkomplement von 0110 gleich 1010:
1101 + 1010 ------- 1 0111Nach dem Verwerfen des externen Übertrags bleibt 0111, also 7.
Binärmultiplikation: Teilprodukte und Verschiebungen
- 0 × 0 = 0;
- 0 × 1 = 0;
- 1 × 0 = 0;
- 1 × 1 = 1.
Jede Ziffer des Multiplikators erzeugt ein Teilprodukt. Eine 0 erzeugt Nullen, eine 1 eine Kopie des Multiplikanden. Je weiter links die Multiplikatorstelle liegt, desto weiter wird das Teilprodukt verschoben.
Beispiel: 101 × 11
101 × 11 ----- 101 + 1010 ----- 1111Binär 101 ist 5 und binär 11 ist 3. Das Ergebnis 1111 ist 15, also 5 × 3 = 15.
Eine Linksverschiebung multipliziert eine vorzeichenlose Zahl bei ausreichender Breite mit 2. Bei fester Breite können links herausgeschobene Bits verloren gehen.
Binärdivision: vergleichen, subtrahieren, Rest bilden
Wie bei der schriftlichen Dezimaldivision wird geprüft, ob der Divisor in den aktuellen Teil des Dividenden passt. Falls ja, wird 1 in den Quotienten geschrieben und subtrahiert; andernfalls 0. Danach wird die nächste Ziffer heruntergeholt.
Einfaches Beispiel: 1100 ÷ 10
1100₂ ist 12, 10₂ ist 2. Der Quotient ist 110₂, also 6, Rest 0.
Eine positive vorzeichenlose Zahl durch 10₂ zu teilen entspricht einer Rechtsverschiebung um eine Stelle. Das rechts entfernte Bit ist der Rest bei Division durch 2.
Beispiel mit Rest: 10111 ÷ 11
10111₂ ÷ 11₂ = 111₂ mit Rest 10₂.
Dezimal: 23 = 3 × 7 + 2. Der Rest 2 ist kleiner als der Divisor 3.
Verschiebungen und Zweierpotenzen
- eine Linksverschiebung multipliziert mit 2;
- zwei Linksverschiebungen multiplizieren mit 4;
- eine Rechtsverschiebung entspricht bei nichtnegativen Zahlen einer Ganzzahldivision durch 2;
- k Verschiebungen entsprechen 2ᵏ.
Bei Zahlen mit Vorzeichen muss zwischen logischer und arithmetischer Rechtsverschiebung unterschieden werden. Das genaue Verhalten hängt von Architektur und Sprache ab.
Feste Breite, Carry und Overflow
Auf vier vorzeichenlosen Bits:
1111 + 0001 ------- 1 0000Das mathematische Ergebnis 16 passt nicht in den Bereich 0 bis 15. Werden nur vier Bits gespeichert, bleibt 0000; der externe Übertrag meldet den Bereichsüberlauf.
Carry und vorzeichenbehafteter Overflow sind verschieden. Auf vier Bits im Zweierkomplement:
0111 (+7) + 0001 (+1) ------- 10001000 bedeutet -8, obwohl das mathematische Ergebnis +8 wäre. Damit liegt signed Overflow vor, auch ohne externen Carry.
Was macht die CPU?
Die CPU verwendet Logikschaltungen, keine schriftlichen Spalten. Volladdierer verarbeiten Operandenbits und Überträge; Register halten Werte; Steuerschaltungen wählen die Operation.
Die offizielle Intel-Befehlsreferenz beschreibt ADD, ADC für Addition mit Carry, SUB, SBB für Subtraktion mit Borrow sowie Multiplikations- und Divisionsbefehle. Statusflags wie Carry und Overflow ermöglichen Mehrwortarithmetik und Bereichsprüfungen.
Überprüfung mit Python
a = 0b1011 b = 0b1101 print(bin(a + b)) # 0b11000 print(bin(a - 0b0110)) # 0b101 print(bin(0b101 * 0b11)) # 0b1111 q, r = divmod(0b10111, 0b11) print(bin(q), bin(r)) # 0b111 0b10Python-Ganzzahlen besitzen beliebige Genauigkeit. Ein Registerüberlauf mit vier oder acht Bits wird daher nicht automatisch nachgebildet. Eine Maske wie & 0b1111 begrenzt den Wert auf vier Bits.
Häufige Fehler
- Stellen nicht rechts ausrichten: unterschiedliche Gewichte werden kombiniert.
- Übertrag in derselben Spalte lassen: er gehört nach links.
- Entleihende Spalte nicht vermindern: eine Entleihung verändert sie.
- Teilprodukte nicht verschieben: die Multiplikatorstellen haben unterschiedliche Gewichte.
- Quotient und Rest verwechseln: der Rest muss kleiner als der Divisor sein.
- Wortbreite ignorieren: ein mathematisches Ergebnis kann nicht darstellbar sein.
- Carry und Overflow verwechseln: sie beschreiben unterschiedliche Bedingungen.
Häufig gestellte Fragen
Warum ergibt 1 + 1 nicht die Ziffer 2?
Der Wert ist zwei, wird in Basis 2 aber als 10 geschrieben.
Wann wird der letzte Übertrag zur neuen Ziffer?
Bei variabler Breite. In einem festen Register kann er außerhalb des gespeicherten Ergebnisses in einem Carry-Flag stehen.
Bedeutet Multiplikation mit 10₂ Multiplikation mit zehn?
Nein. 10₂ ist dezimal 2.
Kann eine Binärdivision einen Rest haben?
Ja, wenn der Dividend kein exaktes Vielfaches des Divisors ist.
Warum nutzt man das Zweierkomplement?
Damit Subtraktion als Addition ausgeführt und dieselbe Schaltung wiederverwendet werden kann.