In Teil 1 haben wir gelernt, wie negative Zahlen im Zweierkomplement (2K) dargestellt und umgerechnet werden. Jetzt kommt der spannende Teil: Wie viele Zahlen passen eigentlich in n Bit – und wie rechnet eine CPU damit, obwohl sie eigentlich nur addieren kann?
📚 Diese Reihe: Teil 1 – Darstellen & Umrechnen · Teil 2 – Wertebereiche & Rechnen wie ein Computer (dieser Beitrag)
Wertebereiche: Was passt in n Bit?
Mit n Bits lassen sich immer genau 2ⁿ verschiedene Zahlen darstellen. Wie viele das sind, ändert sich also nicht – nur welche Zahlen, je nach Interpretation:
| Darstellung | Wertebereich (WB) | Beispiel n = 3 Bit | Beispiel n = 8 Bit |
|---|---|---|---|
| „normales“ Binär (nur ⊕, ℕ₀) | [0 ; 2ⁿ−1] | [0 ; 7] | [0 ; 255] |
| Zweierkomplement (⊕ & ⊖, ℤ) | [−2ⁿ⁻¹ ; 2ⁿ⁻¹−1] | [−4 ; 3] | [−128 ; 127] |
Bei 3 Bit sind es in beiden Fällen 8 darstellbare Zahlen – einmal 0…7, einmal −4…3. Beim Zweierkomplement „kostet“ das VZ-Bit die Hälfte des positiven Bereichs, dafür gibt’s negative Zahlen. Der negative Bereich reicht eine Zahl weiter als der positive (−4 vs. +3), weil die 0 keinen eigenen Vorzeichen-Slot braucht.
Merksatz: Normal
[0 ; 2ⁿ−1], Zweierkomplement[−2ⁿ⁻¹ ; 2ⁿ⁻¹−1].
Rechnen wie ein Computer: Subtraktion = Addition
Hier wird’s spannend: Eine CPU kann eigentlich gar nicht subtrahieren. Sie kann nur addieren. Der Trick: Statt a − b rechnet sie a + (−b), wobei −b im Zweierkomplement vorliegt. Ein eventueller Übertrag aus dem höchsten Bit wird einfach verworfen – und das Ergebnis stimmt automatisch.
Genau deshalb ist 2K im Computer so beliebt: Addition und Subtraktion laufen über dieselbe Hardware-Schaltung.
Beispiel a) 7 + (−5) = 2 (4 Bit)
| Operand | Bits |
|---|---|
7 | 0111 |
−5 | 1011₂ₖ |
| Summe | (1)0010 → Übertrag streichen → 0010 = 2 |
Beispiel b) 13 − 8 = 5 (5 Bit) → gerechnet als 13 + (−8)
| Operand | Bits |
|---|---|
13 | 01101 |
−8 | 11000₂ₖ |
| Summe | (1)00101 → 00101 = 5 |
Beispiel c) 23 − 16 = 7 (6 Bit) → 23 + (−16)
| Operand | Bits |
|---|---|
23 | 010111 |
−16 | 110000₂ₖ |
| Summe | (1)000111 → 000111 = 7 |
Beispiel d) −3 + (−5) = −8 (4 Bit) – zwei negative Zahlen
| Operand | Bits |
|---|---|
−3 | 1101₂ₖ |
−5 | 1011₂ₖ |
| Summe | (1)1000 → 1000₂ₖ = −8 |
In allen Fällen: addieren, den Übertrag links wegwerfen, fertig. Kein Sonderfall fürs Minus.
⚠️ Überlauf (Overflow) – wenn das Ergebnis nicht mehr passt
Was passiert, wenn das Ergebnis den Wertebereich sprengt? Beispiel in 3 Bit (WB [−4 ; 3]):
−4 + (−4) = −8 — aber −8 liegt außerhalb von [−4 ; 3].
| Operand | Bits |
|---|---|
−4 | 100₂ₖ |
−4 | 100₂ₖ |
| Summe | (1)000 → 000 = 0 ❌ (erwartet: −8) |
Das Ergebnis 0 ist schlicht falsch – ein klassischer Integer Overflow. Die Faustregel zur Erkennung:
Haben beide Summanden dasselbe Vorzeichen, das Ergebnis aber ein anderes, ist ein Überlauf passiert.
Hier: beide Operanden negativ (MSB 1), Ergebnis positiv (MSB 0) → Overflow. Genau solche Fehler stecken hinter realen Bugs (vom „Gangnam-Style-Zähler“ bei YouTube bis zu sicherheitskritischen int-Overflows). Wer den Wertebereich im Kopf hat, sieht sie kommen.
💻 Zum Selbst-Ausprobieren: PowerShell-Demo
Dieses Skript berechnet Wertebereiche und addiert zwei Zahlen wie eine CPU – inklusive automatischer Overflow-Erkennung:
<#
.SYNOPSIS
Demonstriert Wertebereiche und Addition im Zweierkomplement (wie eine CPU).
.DESCRIPTION
Funktionen:
ConvertTo-TwosComplement -> Dezimalzahl in 2K-Bitstring (feste Bitbreite)
Get-TwosComplementRange -> Wertebereich fuer n Bit
Add-TwosComplement -> Addition zweier Zahlen mit Overflow-Erkennung
.NOTES
Name: PS_Zweierkomplement_Arithmetik
Author: Andreas Bowitz
Version: 0.1
LastUpdated: 2026-Jun-02
#>
function ConvertTo-TwosComplement {
param(
[Parameter(Mandatory)][int]$Value,
[int]$Bits = 8
)
$mask = [int]([math]::Pow(2, $Bits) - 1)
$tc = $Value -band $mask
return [Convert]::ToString($tc, 2).PadLeft($Bits, '0')
}
function Get-TwosComplementRange {
param([int]$Bits = 8)
[PSCustomObject]@{
Bits = $Bits
Min = -[int][math]::Pow(2, $Bits - 1)
Max = [int][math]::Pow(2, $Bits - 1) - 1
Count = [int][math]::Pow(2, $Bits)
}
}
function Add-TwosComplement {
param(
[Parameter(Mandatory)][int]$A,
[Parameter(Mandatory)][int]$B,
[int]$Bits = 4
)
$range = Get-TwosComplementRange -Bits $Bits
$sum = $A + $B
# Overflow: Ergebnis liegt ausserhalb des Wertebereichs
$overflow = ($sum -lt $range.Min) -or ($sum -gt $range.Max)
[PSCustomObject]@{
Rechnung = "$A + ($B)"
Bits = "$(ConvertTo-TwosComplement $A $Bits) + $(ConvertTo-TwosComplement $B $Bits)"
Ergebnis = $sum
Overflow = $overflow
}
}
# --- Test anhand der Beispiele aus dem Artikel ---
Get-TwosComplementRange -Bits 3 # Min -4, Max 3, Count 8
Get-TwosComplementRange -Bits 8 # Min -128, Max 127, Count 256
Add-TwosComplement -A 7 -B -5 -Bits 4 # 2, Overflow = False
Add-TwosComplement -A -3 -B -5 -Bits 4 # -8, Overflow = False
Add-TwosComplement -A -4 -B -4 -Bits 3 # -8, Overflow = True (!)
Zusammenfassung
- Mit n Bits sind immer 2ⁿ Zahlen darstellbar.
- Wertebereich: normal
[0 ; 2ⁿ−1], Zweierkomplement[−2ⁿ⁻¹ ; 2ⁿ⁻¹−1]. - Ein Computer subtrahiert durch Addition des Zweierkomplements – der Übertrag links wird verworfen.
- Überlauf droht, sobald das Ergebnis den Wertebereich verlässt (gleiches Vorzeichen rein, anderes raus).
👈 Zurück zu Teil 1: negative Zahlen darstellen & umrechnen, falls du die Grundlagen der 2K-Darstellung auffrischen willst.
