Wie speichert ein Rechner eine negative Zahl, wenn er doch nur Nullen und Einsen kennt? Es gibt kein Minuszeichen im Speicher – nur Bits. Die Antwort heißt Zweierkomplement (2K), und genau das ist auch ein Dauerbrenner in der FISI-Prüfung. In Teil 1 geht es um die Darstellung und beide Rechenrichtungen mit den Algorithmen, mit denen man jede Aufgabe sicher löst – ganz ohne Raten.
📚 Diese Reihe: Teil 1 – Darstellen & Umrechnen (dieser Beitrag) · Teil 2 – Wertebereiche & Rechnen wie ein Computer
Das VZ-Bit – der Trick mit dem Vorzeichen
Der Kern der 2K-Darstellung: Das Bit ganz links ist reserviert und signalisiert das Vorzeichen einer ganzen Zahl (VZ-Bit).
| MSB (linkes Bit) | Bedeutung |
|---|---|
0 | ⊕ positive Zahl |
1 | ⊖ negative Zahl |
Bei einer positiven Zahl ist nichts Besonderes zu tun – sie wird gelesen wie normales Binär:
0101₂ₖ = 0101₂ = 5₁₀
Bei einer negativen Zahl (MSB = 1) reicht das normale Ablesen nicht. Hier muss ein Algorithmus angewendet werden:
101₂ₖ = ?→ Algorithmus anwenden
Algorithmus 1: negative 2K-Zahl → negative Dezimalzahl
Gegeben: 101₂ₖ. Das MSB ist 1, also ist die Zahl negativ.
| Schritt | Aktion | Ergebnis |
|---|---|---|
| 1 | Bitweise invertieren | 101 → 010 |
| 2 | Eine 1 binär addieren | 010 + 1 = 011 |
| 3 | Dezimalwert im normalen Binärsystem | 011₂ = 3 |
| 4 | Vorzeichen ⊖ setzen | -3 |
Ergebnis:
101₂ₖ = -3₁₀
Algorithmus 2: negative Dezimalzahl → 2K-Darstellung
Gegeben: -14₁₀. Wir arbeiten mit dem Betrag: |-14| = 14.
| Schritt | Aktion | Ergebnis |
|---|---|---|
| 1 | Betrag binär darstellen (14 = 8+4+2) | 1110 |
| 2 | Bitweise invertieren | 0001 |
| 3 | Eine 1 binär addieren | 0001 + 1 = 0010 |
| 4 | MSB ist keine 1? → zusätzliches Bit links anhängen und auf 1 setzen | 1+0010 = 10010 |
Ergebnis:
-14₁₀ = 10010₂ₖ
⚠️ Wichtig: Keine Stellen „verschlucken“! 10010₂ₖ ≠ 10₂ₖ. Die führenden Nullen gehören zur Zahl dazu.
Beispiel 3: positive Zahl in fester Bitbreite (8 Bit)
Damit beide Vorzeichen abgedeckt sind, noch ein positives Beispiel – diesmal mit fest vorgegebener Bitbreite von 8 Bit (ein Byte), wie es in der Praxis üblich ist.
Gegeben: +42₁₀.
| Schritt | Aktion | Ergebnis |
|---|---|---|
| 1 | Zahl binär darstellen (42 = 32+8+2) | 101010 |
| 2 | Auf 8 Bit auffüllen (führende Nullen) | 00101010 |
| 3 | MSB prüfen: 0 → positiv, fertig | 00101010 |
Ergebnis:
+42₁₀ = 00101010₂ₖ
Bei positiven Zahlen ist also kein Invertieren nötig – wichtig ist nur, dass durch das führende 0-Bit das Vorzeichen stimmt. Würde man 42 ohne die führende Null in 6 Bit schreiben (101010), wäre das MSB eine 1 und der Rechner läse die Zahl fälschlich als negativ. Auch hier gilt: Bitbreite entscheidet.
🔧 IT-Hinweis: Warum Schritt 4 nötig ist (Bitbreite)
Der vierte Schritt in Algo 2 wirkt auf den ersten Blick wie ein „Notfix“ – tatsächlich steckt dahinter das wichtigste Prinzip von 2K: Zweierkomplement ist nur eindeutig, wenn die Bitbreite feststeht.
Bei 0010 wäre das MSB 0, der Rechner würde die Zahl als +2 interpretieren – nicht als -14. Erst durch das gesetzte führende 1-Bit wird das Vorzeichen korrekt signalisiert. Anders gesagt: Du musst von Anfang an genug Stellen einplanen, damit
- der Betrag hineinpasst und
- noch eine
0als „Platz“ fürs Vorzeichen frei bleibt.
Genau deshalb landen wir bei -14 auf 5 Bit (10010). In einem klassischen 8-Bit-Byte wäre dieselbe Zahl 11110010₂ₖ. Beide sind korrekt – sie unterscheiden sich nur in der Bitbreite. In der Prüfung also immer prüfen: Wie viele Bits sind vorgegeben?
💻 Zum Selbst-Ausprobieren: PowerShell-Demo
Da man Theorie am besten am Rechner festigt, hier ein kleines Skript, das beide Richtungen umsetzt:
<#
.SYNOPSIS
Demonstriert die Umrechnung Dezimal <-> Zweierkomplement.
.DESCRIPTION
Zwei Funktionen:
ConvertTo-TwosComplement -> Dezimalzahl in 2K-Bitstring (feste Bitbreite)
ConvertFrom-TwosComplement -> 2K-Bitstring zurueck in Dezimalzahl
.NOTES
Name: PS_Zweierkomplement_Umrechnung
Author: Andreas Bowitz
Version: 0.1
LastUpdated: 2026-Jun-02
#>
function ConvertTo-TwosComplement {
param(
[Parameter(Mandatory)][int]$Value,
[int]$Bits = 8
)
# Bitmaske auf die gewuenschte Breite begrenzen
$mask = [int]([math]::Pow(2, $Bits) - 1)
$tc = $Value -band $mask
return [Convert]::ToString($tc, 2).PadLeft($Bits, '0')
}
function ConvertFrom-TwosComplement {
param(
[Parameter(Mandatory)][string]$Bitstring
)
$width = $Bitstring.Length
$value = [Convert]::ToInt32($Bitstring, 2)
# MSB gesetzt -> negative Zahl
if ($Bitstring[0] -eq '1') {
$value = $value - [int][math]::Pow(2, $width)
}
return $value
}
# --- Test anhand der Beispiele aus dem Artikel ---
ConvertFrom-TwosComplement -Bitstring '101' # -> -3
ConvertTo-TwosComplement -Value -14 -Bits 5 # -> 10010
ConvertTo-TwosComplement -Value -14 -Bits 8 # -> 11110010
ConvertTo-TwosComplement -Value 42 -Bits 8 # -> 00101010
Zusammenfassung
- Das MSB entscheidet das Vorzeichen:
0= positiv,1= negativ. - Positive Zahlen liest man wie normales Binär ab.
- Negative Zahlen werden über die immer gleichen Schritte umgerechnet: invertieren → +1 → ablesen (und je nach Richtung Vorzeichen setzen bzw. Bitbreite beachten).
- 2K ist nur mit fester Bitbreite eindeutig – das ist der Schlüssel, um Prüfungsaufgaben sauber zu lösen.
👉 Weiter geht’s in Teil 2: Wertebereiche & Rechnen wie ein Computer – dort sehen wir, wie viele Zahlen in n Bit passen und wie eine CPU damit rechnet (inkl. Überlauf).
