Zweierkomplement-Rechner (Binärumwandlung vorzeichenbehafteter Ganzzahlen)
Wandelt eine vorzeichenbehaftete Dezimalzahl in ihr 8-/16-/32-/64-Bit-Zweierkomplement-Bitmuster um oder umgekehrt. Zeigt zusätzlich die vorzeichenlose Interpretation, die Hexadezimalschreibweise und erkennt Werte außerhalb des Bereichs.
Tipps
- Eine vorzeichenbehaftete 8-Bit-Ganzzahl reicht von -128 bis 127. Geben Sie zunächst 127 und dann 128 ein, um die Überlaufgrenze in Aktion zu sehen – 128 passt nicht hinein und löst den Bereichsfehler aus, genau dort, wo der Umschlag zu -128 stattfinden würde.
- Die Zeile „vorzeichenlose Dezimalzahl“ liest dasselbe Bitmuster, ohne das höchstwertige Bit als Vorzeichen zu behandeln. Der Vergleich mit der vorzeichenbehafteten Zeile macht den Unterschied zwischen beiden Interpretationen sofort sichtbar.
- Eine Binäreingabe muss genau so viele Stellen haben wie die gewählte Bitbreite – 8 Stellen für 8 Bit, 16 für 16 Bit und so weiter.
- 64-Bit-Berechnungen verwenden intern BigInt statt des Number-Typs von JavaScript, sodass Werte nahe 2^63 ohne Genauigkeitsverlust umgewandelt werden.
- Dieses Tool eignet sich auch, um das Überlaufverhalten von Ganzzahlen in Sprachen wie C und Java zu verstehen, wo int (32 Bit) und long (64 Bit) genau an diesen Grenzen umschlagen.
Häufig gestellte Fragen
Übrigens – Warum Computer das Zweierkomplement verwenden
Das Zweierkomplement ist nicht die einzige Möglichkeit, negative Zahlen binär darzustellen. Historisch wurden auch die Vorzeichen-Betrag-Darstellung (bei der nur das höchstwertige Bit als Vorzeichen dient) und das Einerkomplement (einfaches Invertieren der Bits einer positiven Zahl) verwendet. Beide teilen einen gemeinsamen Nachteil: Es entstehen zwei unterschiedliche Bitmuster für null, „+0“ und „-0“, was die Vergleichslogik und das Schaltungsdesign verkompliziert. Das Zweierkomplement vermeidet dieses „Zwei-Nullen-Problem“ vollständig – jedes Bitmuster entspricht genau einem ganzzahligen Wert.
Ein noch größerer Vorteil des Zweierkomplements ist, dass dieselbe Addierschaltung, die für die Addition verwendet wird, auch die Subtraktion durchführen kann, da das Subtrahieren einer Zahl der Addition ihres Zweierkomplements entspricht. Die CPU muss nicht wissen oder sich darum kümmern, ob ein Wert positiv oder negativ ist – sie addiert einfach Bitmuster und erhält in beiden Fällen das richtige Ergebnis. Dadurch kann die arithmetisch-logische Einheit (ALU) vollständig auf eine eigene Subtraktionsschaltung verzichten, weshalb sich praktisch jede moderne CPU-Architektur für das Zweierkomplement bei vorzeichenbehafteten Ganzzahlen entschieden hat.
Ein Ganzzahlüberlauf ist eine direkte Folge dieser Darstellung. Addiert man 1 zum vorzeichenbehafteten 8-Bit-Maximum 127 (01111111), springt das Bitmuster einfach auf 10000000 um – als vorzeichenbehafteter Wert gelesen ist das -128. In C ist ein vorzeichenbehafteter Ganzzahlüberlauf technisch gesehen undefiniertes Verhalten, sodass Compiler-Optimierungen in der Nähe dieser Grenze überraschende Ergebnisse liefern können, weshalb im Produktivcode echte Vorsicht geboten ist. Java hingegen legt fest, dass ein Überlauf stillschweigend umschlägt – ein interessantes Beispiel dafür, wie unterschiedlich die Verhaltensgarantien zwischen Sprachen sein können, obwohl die zugrunde liegende Bitdarstellung identisch ist.