FlowingDev

Zahlensysteme erklärt: Warum Computer so komisch zählen

Lerne, wie Zahlensysteme wie Binär, Oktal, Dezimal und Hexadezimal funktionieren, um dieselbe Zahl auf unterschiedliche Weisen darzustellen – ein Schlüsselkonzept in der Informatik.

Tool ausprobieren: Base Converter

In einem Satz

Die Umrechnung von Zahlensystemen ist die Kunst, eine Zahl von einem Zählsystem (wie unserem vertrauten Dezimalsystem mit zehn Ziffern) in ein anderes (wie das native Binärsystem des Computers mit zwei Ziffern) zu übersetzen, ohne ihren eigentlichen Wert zu verändern.

Welches Problem es löst

Menschen haben, größtenteils, zehn Finger. Diese biologische Hardware machte das Zählen in Zehnergruppen – das Dezimalsystem oder Basis-10-System – unglaublich natürlich. Wir haben zehn eindeutige Symbole (0 bis 9), und sobald wir die Neun erreichen, geht's von vorne los: Wir fügen links eine neue Ziffer hinzu und fangen wieder bei null an. Zehn ist 10, einhundert ist 100 und so weiter. Kinderleicht.

Computer hingegen haben andere „Finger“. Ihre grundlegende Hardware ist der Transistor, ein mikroskopischer Schalter, der entweder an oder aus sein kann. Das war's. Zwei Zustände. Das macht ein Zwei-Symbol-System – das Binärsystem oder Basis-2-System – zur Muttersprache des Computers. Die beiden Symbole sind 0 (aus) und 1 (an).

Das führt zu einem Übersetzungsproblem. Für einen Computer ist die menschliche Zahl 237 bedeutungslos. Sie muss als eine Reihe von An- und Aus-Zuständen dargestellt werden. Dieselbe Zahl 237 ist im Binärsystem 11101101.

Während Computer fließend binär sprechen, tun Menschen das ... nicht. Eine lange Kette von Einsen und Nullen zu lesen, ist ein Rezept für Kopfschmerzen und überanstrengte Augen. Um diese Lücke zu schließen, haben Entwickler praktische Kurzschriften entwickelt: das Oktalsystem (Basis-8) und das Hexadezimalsystem (Basis-16). Diese „Zweierpotenz“-Basen lassen sich trivial ins Binärsystem umwandeln und zurück, komprimieren aber lange Binärketten in viel lesbarere Brocken.

Zahlensysteme existieren, um dieses grundlegende Missverhältnis zwischen dem menschlichen Denken über Zahlen und der physischen Speicherung durch Maschinen zu lösen. Sie sind der Rosetta-Stein, der uns einen Blick in den Geist der Maschine werfen lässt, ohne uns in einem Meer aus Einsen und Nullen zu verlieren.

Wie es unter der Haube funktioniert

Die Magie hinter jedem Zahlensystem ist ein Konzept namens Stellenwertsystem. Die Position einer Ziffer bestimmt ihren Wert. Lass uns das mal auseinandernehmen.

Was ist überhaupt eine „Basis“?

Denk an den Kilometerzähler deines Autos. Wenn die Ziffer ganz rechts von 9 auf 0 springt, klickt die Ziffer links davon um eins nach oben. Jede „Stelle“ einer Ziffer repräsentiert eine Zehnerpotenz.

Die Zahl 427 in unserem alltäglichen Basis-10-System bedeutet eigentlich:

  • 4 Hunderter (4 × 10²)
  • 2 Zehner (2 × 10¹)
  • 7 Einer (7 × 10⁰)

Addiert man sie: 400 + 20 + 7 = 427.

Eine „Basis“ ist einfach die Zahl, die wir für jede Position potenzieren. Für Basis-10 ist es die 10. Für Binär (Basis-2) ist es die 2. Für Hexadezimal (Basis-16) ist es die 16. Die Formel ist dieselbe, nur die Basis (b) ändert sich:

... + (Ziffer × b²) + (Ziffer × b¹) + (Ziffer × b⁰)

Von unserer Welt (Dezimal) in ihre (beliebige Basis)

Lass uns unsere Dezimalzahl 427 ins Binärsystem (Basis-2) umrechnen. Der Algorithmus lautet: „Teile wiederholt durch die Zielbasis und notiere den Rest.“

Division Ergebnis Rest
427 ÷ 2 213 1
213 ÷ 2 106 1
106 ÷ 2 53 0
53 ÷ 2 26 1
26 ÷ 2 13 0
13 ÷ 2 6 1
6 ÷ 2 3 0
3 ÷ 2 1 1
1 ÷ 2 0 1

Jetzt lies die Reste von unten nach oben.

Also, die Dezimalzahl 427 ist binär 110101011.

Diese Methode funktioniert für jede Basis. Um 427 ins Hexadezimalsystem (Basis-16) umzurechnen, teilst du einfach durch 16. (Hinweis: In Basis-16 brauchen wir mehr als 10 Symbole, also verwenden wir A für 10, B für 11, ..., bis F für 15).

  • 427 ÷ 16 = 26 mit einem Rest von 11 (was B in Hex ist).
  • 26 ÷ 16 = 1 mit einem Rest von 10 (was A in Hex ist).
  • 1 ÷ 16 = 0 mit einem Rest von 1.

Von unten nach oben gelesen ergibt das 1AB. Also ist die Dezimalzahl 427 in Hex 1AB.

Von ihrer Welt (beliebige Basis) zurück in unsere (Dezimal)

Um den umgekehrten Weg zu gehen, verwenden wir die Stellenwert-Formel, die wir vorhin gesehen haben. Lass uns die Binärzahl 110101011 zurück ins Dezimalsystem umrechnen. Wir multiplizieren jede Ziffer mit 2 hoch der Potenz ihrer Position (beginnend bei 0 von rechts).

  1 * 2^8 = 256
+ 1 * 2^7 = 128
+ 0 * 2^6 = 0
+ 1 * 2^5 = 32
+ 0 * 2^4 = 0
+ 1 * 2^3 = 8
+ 0 * 2^2 = 0
+ 1 * 2^1 = 2
+ 1 * 2^0 = 1
----------------
Total     = 427

Es funktioniert! Probieren wir es mit der Hex-Zahl 1AB:

  1 * 16^2 = 256
+ A * 16^1 = (10 * 16) = 160
+ B * 16^0 = (11 * 1)  = 11
-------------------------
Total      = 427

Bämm. Gleiche Zahl, unterschiedliche Outfits.

Die Hexadezimal- und Oktal-Abkürzung

Warum sich also mit Hexadezimal und Oktal herumschlagen? Weil sie „Zweierpotenz“-Basen sind.

  • Oktal ist Basis-8, und 8 = 2³. Das bedeutet, jede einzelne oktale Ziffer entspricht perfekt einer Gruppe von drei Binärziffern.
  • Hexadezimal ist Basis-16, und 16 = 2⁴. Das bedeutet, jede einzelne hexadezimale Ziffer entspricht perfekt einer Gruppe von vier Binärziffern (ein sogenanntes „Nibble“).

Nehmen wir eine große Binärzahl: 1101011101001111 Um diese zu lesen, muss ein Mensch jede Ziffer scannen. Aber um sie in Hex umzuwandeln, teilst du sie einfach von rechts in Vierergruppen auf:

1101 | 0111 | 0100 | 1111

Jetzt wandle jeden Block um:

  • 1101 ist 8+4+0+1 = 13, was D ist
  • 0111 ist 0+4+2+1 = 7
  • 0100 ist 0+4+0+0 = 4
  • 1111 ist 8+4+2+1 = 15, was F ist

Also ist 1101011101001111 einfach D74F in Hex. Unendlich viel lesbarer und weniger fehleranfällig. Das ist nicht nur eine Berechnung; es ist eine direkte Abschrift. Deshalb lieben Entwickler das Hexadezimalsystem: Es ist die perfekte, menschenlesbare Hülle für Binärdaten.

Geschichten aus der echten Welt

Der Fall der kryptischen Farbe

Ein Junior-Frontend-Entwickler erhält ein Design-Mockup von einem UI-Designer. Die Hauptfarbe der Marke ist als #E63946 angegeben. Der Entwickler weiß, dass dies ein Rotton ist, aber wie viel Rot? Und was ist mit den anderen Farben? Er wirft den Hex-Code in einen Konverter. E63946 besteht eigentlich aus drei separaten Hex-Zahlen: E6 für Rot, 39 für Grün und 46 für Blau.

  • E6 in Hex umgerechnet ergibt 230 in Dezimal. Okay, also eine Menge Rot (von maximal 255).
  • 39 in Hex umgerechnet ergibt 57 in Dezimal. Ein bisschen Grün.
  • 46 in Hex umgerechnet ergibt 70 in Dezimal. Ein bisschen Blau.

Durch das Aufschlüsseln des Hex-Codes versteht der Entwickler die Zusammensetzung der Farbe. Es ist nicht nur „Rot“, es ist „hauptsächlich Rot, mit einem kleinen, ähnlichen Anteil an Grün und Blau, um es weniger grell zu machen.“

Die Lektion: Hexadezimal ist die Sprache der Farbe im Web. Sie zu verstehen hilft dir, über das bloße Kopieren und Einfügen von Codes hinauszugehen und die Farben, mit denen du arbeitest, wirklich zu verstehen.

Das Rätsel der Dateisystem-Berechtigungen

Ein Sysadmin versucht, ein neu hochgeladenes Skript, deploy.sh, auf einem Linux-Server abzusichern. Er möchte, dass der Besitzer es lesen, schreiben und ausführen kann, aber die Gruppe und alle anderen sollen es nur lesen und ausführen können. Er hat den Befehl chmod 755 deploy.sh überall gesehen, ihn aber immer nur als magische Beschwörungsformel behandelt.

Diesmal schlägt er es nach. Die Zahl 755 ist oktal. Sie repräsentiert drei Sätze von Berechtigungen: Besitzer, Gruppe und Andere.

  • Die Berechtigung des Besitzers ist 7. In Binär ist 7 111.
  • Die Berechtigung der Gruppe ist 5. In Binär ist 5 101.
  • Die Berechtigung für „Andere“ ist 5. In Binär ist 5 101.

Jede Binärziffer entspricht einer bestimmten Berechtigung: Lesen (r), Schreiben (w) und Ausführen (x).

  • 111 bedeutet rwx (Lesen, Schreiben, Ausführen sind alle AN).
  • 101 bedeutet r-x (Lesen und Ausführen sind AN, Schreiben ist AUS).

Also setzt chmod 755 die Berechtigungen auf rwxr-xr-x, was genau das war, was benötigt wurde. Das Rätsel war gelöst.

Die Lektion: Das Oktalsystem bietet eine super-prägnante Kurzschrift zur Verwaltung von Dateiberechtigungen, die im Grunde eine Reihe von An/Aus-Schaltern (Bits) sind.

Der Bit-Flipping-Bug

Ein Entwickler, der ein Embedded-System für einen intelligenten Thermostat baut, muss Geräteeinstellungen in einem winzigen Speicherbereich sichern. Um Platz zu sparen, verwendet er ein einziges Byte (8 Bits) als „Flag-Register“. Jedes Bit repräsentiert eine Einstellung: isHeating, isCooling, fanOn, hasWifiConnection, usw.

Eines Tages hagelt es Bug-Reports: „Wenn ich den Lüfter einschalte, springt auch die Heizung an!“ Der Entwickler ist ratlos. Der Code zum Einschalten des Lüfters sieht richtig aus. Aber als er das Einstellungs-Byte im Speicher inspiziert, sieht er das Problem. Nehmen wir an, der Lüfter ist das 2. Bit (Wert 2¹ = 2) und die Heizung das 3. Bit (Wert 2² = 4). Der Code sollte das Byte auf ...010 setzen (Lüfter an). Stattdessen setzte er es auf ...110 (Lüfter an UND Heizung an). Der Dezimalwert wäre 6 statt 2 gewesen, was nicht sofort offensichtlich ist. Aber der Blick auf die binäre Darstellung 00000110 machte das Problem glasklar: Zwei Bits wurden umgelegt statt nur einem. Eine fehlerhafte bitweise Operation war der Übeltäter.

Die Lektion: Für Low-Level-Programmierung, Speicher-Debugging oder die Arbeit mit Hardware-Registern ist das Denken in Binär keine Option – es ist der einzige Weg, um zu sehen, was wirklich passiert.

Häufige Fehler und Fallstricke

  • Die Präfixe vergessen. In vielen Programmiersprachen (wie C, Java oder JavaScript) wird eine Zahl, die mit 0 beginnt, als oktal interpretiert. 010 ist nicht zehn, es ist acht! Eine Zahl, die mit 0x beginnt, ist hexadezimal. 0x10 ist sechzehn. Das nicht zu wissen, kann zu wirklich wilden Bugs führen.
  • O/0 und I/1 verwechseln. Wenn du auf lange Hex- oder Binärketten starrst, ist es leicht, dass deine Augen glasig werden und du den Buchstaben O mit einer Null oder I mit einer Eins verwechselst. Hexadezimal verwendet kein O oder I, aber andere Basiskonvertierungen könnten es tun, und es ist ein klassischer „dicker Finger“-Fehler.
  • Annahme eines Standards für Basen > 16. Die Zeichen für Binär (0-1), Oktal (0-7), Dezimal (0-9) und Hexadezimal (0-9, A-F) sind standardisiert. Aber was ist mit Basis-22 oder Basis-36? Die meisten Systeme verwenden 0-9 gefolgt von A-Z, aber das ist kein universelles Gesetz. Überprüfe immer den verwendeten Zeichensatz (oder das „Alphabet“), wenn du mit weniger gebräuchlichen Basen arbeitest.
  • Ganzzahl-Limits ignorieren. Eine 64-Bit-Hexadezimalzahl wie 0x7FFFFFFFFFFFFFFF stellt eine gigantische Zahl dar. Wenn du versuchst, sie zu konvertieren und in einer Standard-32-Bit-Integer-Variablen in deinem Programm zu speichern, passt sie nicht hinein. Dies führt zu einem „Integer-Überlauf“, bei dem die Zahl zu einem negativen Wert „umschlägt“ oder einen Fehler auslöst.

Warum du das auf dem Schirm haben solltest

Selbst wenn du kein Low-Level-C-Programmierer bist, wirst du ständig auf verschiedene Zahlensysteme stoßen. Du solltest an sie denken, wann immer du:

  • Eine Farbe in CSS oder einem Designtool auswählst (#RRGGBB).
  • Mit Hash-Werten wie API-Keys oder Git-Commit-SHAs zu tun hast, die fast immer hexadezimal sind.
  • Berechtigungen auf einem Webserver festlegst (chmod).
  • Mit Low-Level-Datenformaten, Netzwerkprotokollen oder allem, was Bitmasken verwendet (z. B. Feature-Flags), arbeitest.
  • Auf Fehlercodes oder Speicheradressen in einem Debugger stößt.
  • Versuchst zu verstehen, wie Computer wirklich funktionieren. Es ist ein grundlegendes Konzept, das viel von der digitalen Magie entmystifiziert.

Tauch tiefer ein

  • Stellenwertsystem (Wikipedia): Der akademische Deep Dive in die Theorie hinter allen Zahlensystemen.
  • Hexadezimalsystem (Wikipedia): Ein großartiger Überblick über Basis-16, seine Geschichte und seine üblichen Anwendungen in der Informatik.
  • **MDN Web Docs: <color>: Der maßgebliche Leitfaden für Webentwickler zu CSS-Farbwerten, einschließlich einer gründlichen Erklärung der Hex-Notation (#RRGGBB).
  • chmod man page: Das kanonische Linux-Handbuch für den chmod-Befehl, das die Verwendung von Oktalzahlen zur Festlegung von Dateiberechtigungen detailliert beschreibt (auf Englisch).
  • Bitweise Operatoren in JavaScript (MDN): Ein praktischer Leitfaden, der zeigt, wie Manipulationen auf Bit-Ebene in einer High-Level-Sprache durchgeführt werden – ein häufiges Szenario zur Anwendung von Basis-2-Wissen.

Theorie erledigt. Zeit, loszulegen — 100 % in deinem Browser.

Tool ausprobieren: Base Converter