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 644ist oktal. 6 = 110 binär (lesen und schreiben), 4 = 100 (nur lesen).chmod 755ergibtrwxr-xr-x. Wer die Binärdarstellung kennt, liest Rechte direkt. - Subnetzmasken:
/24bedeutet 24 Einsen gefolgt von 8 Nullen – die Maske255.255.255.0ist genau das: vier Bytes mit den HexwertenFF FF FF 00. - Farben im Web:
#2563EBsind 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.