Computer rechnen im Binärsystem – mit nur zwei Ziffern. Wer täglich mit Adressen, Dateirechten, Farbwerten und Speichergrößen umgeht, braucht daneben vor allem das Hexadezimalsystem. Dieser Artikel erklärt den Zusammenhang und das Rechnen zwischen den Systemen.

Warum überhaupt mehrere Systeme

Das Binärsystem ist technisch naheliegend: Ein Schaltkreis kennt zwei Zustände (Strom an oder aus), also zwei Ziffern. Es ist aber für Menschen unhandlich – die Zahl 200 besteht binär aus acht Ziffern, eine IPv6-Adresse aus 128. Andere Systeme verkürzen diese Darstellung, ohne den Inhalt zu ändern:

  • Binär (Basis 2): Ziffern 0 und 1. Technisch die Wahrheit, für Menschen unleserlich bei großen Werten.
  • Oktal (Basis 8): Ziffern 0–7. Historisch bei älteren Unix-Rechten verbreitet; heute selten.
  • Dezimal (Basis 10): Ziffern 0–9. Das gewohnte System für Menschen.
  • Hexadezimal (Basis 16): Ziffern 0–9 und A–F. Die Standarddarstellung für alles, was eng an Bits liegt: Speicheradressen, Farben, MAC-Adressen, Hashes, IPv6.

Stellenwerte verstehen

Jede Stelle hat einen Wert, der sich aus der Basis hoch der Position ergibt. Das gilt in jedem System gleich:

Dezimal 2 4 7
  7 * 10^0 =   7
  4 * 10^1 =  40
  2 * 10^2 = 200
             247

Binaer 1 0 1 1
  1 * 2^0 = 1
  1 * 2^1 = 2
  0 * 2^2 = 0
  1 * 2^3 = 8
            11

Hexadezimal 2 F
  F = 15 * 16^0 = 15
  2 *  1 * 16^1 = 32
                  47

Die Brücke: vier Bits, eine Hexziffer

Der praktische Grund für Hexadezimal ist diese Beziehung: Eine Hexziffer entspricht genau vier Bits (ein Nibble). Weil 16 = 2⁴, lässt sich zwischen Binär und Hexadezimal umrechnen, ohne zu rechnen – man ersetzt Vierergruppen.

Hex   Bit    Dez      Hex   Bit    Dez
 0    0000    0       8    1000    8
 1    0001    1       9    1001    9
 2    0010    2       A    1010   10
 3    0011    3       B    1011   11
 4    0100    4       C    1100   12
 5    0101    5       D    1101   13
 6    0110    6       E    1110   14
 7    0111    7       F    1111   15

# Umrechnung: Vierergruppen von rechts bilden
Binaer:  1 1011 0010
Gruppen:  1 | 1011 | 0010
Hex:      1 |    B |    2     ->  0x1B2

# Umgekehrt: jede Hexziffer zu vier Bits
0x2F
  2 -> 0010
  F -> 1111
  -> 0010 1111  =  47 dezimal

Ein Byte (8 Bit) sind also genau zwei Hexziffern. Deshalb schreibt man Speicheradressen, Farbwerte (#FF8800) und MAC-Adressen (00:1A:2B:3C:4D:5E) in Hexadezimal – jedes Byte ist auf einen Blick lesbar.

Rechnen mit dem Terminal

# Bash: Arithmetik in verschiedenen Basen
echo $(( 0x2F ))            # 47    (Hex 2F nach dezimal)
echo $(( 2#1011 ))          # 11    (Basis 2 ausdruecklich)
echo $(( 16#FF ))           # 255
echo $(( 8#777 ))           # 511
printf '%x\n' 255           # ff    (dezimal nach hex)
printf '%X\n' 255           # FF
printf '%d\n' 0x1b2         # 434
printf '%o\n' 64            # 100   (oktal)

# Python bietet die klarsten Wege
python3 -c "print(bin(47), hex(47), oct(47))"
#   -> 0b101111 0x2f 0o57
python3 -c "print(int('1011', 2), int('2F', 16), int('777', 8))"
#   -> 11 47 511
python3 -c "print(f'{255:08b}')"     # 11111111  (8 Bit mit Nullen)

# Bitweise Operationen - tauchen in Rechten, Masken, Flags auf
echo $(( 0b1100 & 0b1010 ))   # 8    (UND: beide Bits gesetzt)
echo $(( 0b1100 | 0b1010 ))   # 14   (ODER: eines von beiden)
echo $(( 0b1100 ^ 0b1010 ))   # 6    (XOR: genau eines)
echo $(( 1 << 3 ))          # 8    (Linksverschieben = *2^3)
echo $(( 40 >> 2 ))          # 10   (Rechtsverschieben = /2^2)

Wo es im Alltag auftaucht

  • Dateirechte: chmod 644 ist oktal. 6 = 110 binär (lesen und schreiben), 4 = 100 (nur lesen). chmod 755 ergibt rwxr-xr-x. Wer die Binärdarstellung kennt, liest Rechte direkt.
  • Subnetzmasken: /24 bedeutet 24 Einsen gefolgt von 8 Nullen – die Maske 255.255.255.0 ist genau das: vier Bytes mit den Hexwerten FF FF FF 00.
  • Farben im Web: #2563EB sind drei Bytes – Rot 0x25, Grün 0x63, Blau 0xEB.
  • IPv6-Adressen: Acht Gruppen von vier Hexziffern – jede Gruppe ist ein 16-Bit-Wert, etwa 2001:0db8::1.
  • Hashes: SHA-256 wird als 64 Hexziffern dargestellt, also 32 Byte.
  • Netzwerk-Analyse: Hexdumps von Paketen sind die Rohdarstellung – Ports, Flags und Nutzdaten stehen dort in Hexadezimal.
  • Speichergrößen: Der Sprung von 1024 (2¹⁰) statt 1000 erklärt, warum eine als „1 TB“ verkaufte Platte vom Betriebssystem als 931 GB angezeigt wird – der Hersteller rechnet dezimal, das System binär.

Zahlensysteme und Präfixe in der Notierung

0b1011     Basis 2   (Bash, Python, viele Sprachen)
0o57       Basis 8   (Python 3)
0x2F       Basis 16  (ueberall)
057        Basis 8   (C, Shell - VORSICHT: fuehrende Null!)
2Fh        Basis 16  (Assembler)

# Klassische Falle: fuehrende Null in Shell-Skripten
echo $(( 08 ))      # Fehler! 8 gibt es in Oktal nicht
echo $(( 010 ))     # 8, nicht 10 - oktale Interpretation

Die führende Null ist eine der häufigsten Quellen für Überraschungen: date +%d liefert 08 für den achten Tag. Wer das in eine Rechnung einsetzt, bekommt einen Fehler oder – schlimmer – stillschweigend 0. Die Lösung ist, konsequent Basis 10 zu erzwingen: $(( 10#$tag )).

Übungen zum Selbstprüfen

# Loesungen unter den Aufgaben
1. hex(200)        = 0xc8
2. bin(200)        = 0b11001000
3. int('FF', 16)   = 255
4. 0b11111111      = 255
5. chmod 640       = rw-r-----
6. /26 Maske       = 255.255.255.192   (26 Einsen, 6 Nullen)
7. 3 Byte in Hex   = 6 Hexziffern        (0xRRGGBB)

Verwandte Grundlagen: Binärsystem, Bits und Bytes, Subnetting verstehen, Zeichenkodierung.