andi@abow: ~/ausbildung_fachinformatiker/ $ cat fisi-zweierkomplementdarstellung-im-binaersystem-2k-verstehen.md
>_abow

how do you do IT

Alle möglichen Handkniffe, die ich mir so zusammentrage im Berufsalltag

← cd ~/

FISI // Zweierkomplement (2K): negative Zahlen darstellen & umrechnen (Teil 1)

FISI // Zweierkomplement (2K): negative Zahlen darstellen & umrechnen (Teil 1)

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.

SchrittAktionErgebnis
1Bitweise invertieren101010
2Eine 1 binär addieren010 + 1 = 011
3Dezimalwert im normalen Binärsystem011₂ = 3
4Vorzeichen ⊖ setzen-3

Ergebnis: 101₂ₖ = -3₁₀

Algorithmus 2: negative Dezimalzahl → 2K-Darstellung

Gegeben: -14₁₀. Wir arbeiten mit dem Betrag: |-14| = 14.

SchrittAktionErgebnis
1Betrag binär darstellen (14 = 8+4+2)1110
2Bitweise invertieren0001
3Eine 1 binär addieren0001 + 1 = 0010
4MSB ist keine 1? → zusätzliches Bit links anhängen und auf 1 setzen1+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₁₀.

SchrittAktionErgebnis
1Zahl binär darstellen (42 = 32+8+2)101010
2Auf 8 Bit auffüllen (führende Nullen)00101010
3MSB prüfen: 0 → positiv, fertig00101010

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 0 als „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).

Weiterlesen

$ Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert