Das Binärsystem
Wir sind es gehwont uns im Dezimalsystem zu bewegen. Das bedeutet, dass wir Zahlen in der Basis 10 darstellen. Wir verwenden dazu 10 verschiedene Ziffern, nämlich die Ziffern 0 bis 9.
Um Zahlen darzustellen, welche grösser sind als 9 darzustellen, verwednen wir die Zehnerpotenzen. Das heisst, dass die Ziffern von rechts nach links gelesen, die Zehnerpotenzen von 0 an aufsteigend sind. Die Zahl 123 entspricht also der Rechnung \(1 \cdot 10^2 + 2 \cdot 10^1 + 3 \cdot 10^0\).
Das Binärsystem funktioniert nach dem gleichen Prinzip, nur dass wir nur die Ziffern 0 und 1 verwenden. Das bedeutet, dass wir Zahlen in der Basis 2 darstellen. Sobald eine Zahl grösser als 1 dargestellt werden soll, schreiben wir die Zahl als Summe von Zweierpotenzen. Die Zahl 101 entspricht also der Rechnung \(1 \cdot 2^2 + 0 \cdot 2^1 + 1 \cdot 2^0\).
Umrechnung von Dezimalzahlen in Binärzahlen
Um eine Dezimalzahl in eine Binärzahl umzurechnen, gibt es eine systematische Methode, die auf wiederholter Division durch 2 basiert:
- Teile die Dezimalzahl durch 2 und notiere den Rest (0 oder 1).
- Teile den Quotienten (Ergebnis der Division) erneut durch 2 und notiere wieder den Rest.
- Fahre damit fort, bis der Quotient 0 ist.
- Die Binärzahl wird nun gebildet, indem man die Reste von unten nach oben (vom letzten zum ersten) liest.
Beispiel: Umrechnung von 42 ins Binärsystem
Lassen Sie uns die Dezimalzahl 42 in eine Binärzahl umrechnen:
Division | Rechnung | Quotient | Rest |
---|---|---|---|
42 ÷ 2 | 42 = 21 · 2 + 0 | 21 | 0 |
21 ÷ 2 | 21 = 10 · 2 + 1 | 10 | 1 |
10 ÷ 2 | 10 = 5 · 2 + 0 | 5 | 0 |
5 ÷ 2 | 5 = 2 · 2 + 1 | 2 | 1 |
2 ÷ 2 | 2 = 1 · 2 + 0 | 1 | 0 |
1 ÷ 2 | 1 = 0 · 2 + 1 | 0 | 1 |
Nun lesen wir die Reste von unten nach oben: 101010
Also ist 42 im Dezimalsystem gleich 101010 im Binärsystem.
Überprüfung:
\(1 \cdot 2^5 + 0 \cdot 2^4 + 1 \cdot 2^3 + 0 \cdot 2^2 + 1 \cdot 2^1 + 0 \cdot 2^0\) \(= 32 + 0 + 8 + 0 + 2 + 0 = 42\)
Eine alternative Methode zur Umrechnung ist die Verwendung der Zweierpotenzen. Man zerlegt die Dezimalzahl in eine Summe von Zweierpotenzen und schreibt dann eine 1 an den Stellen der verwendeten Potenzen und eine 0 an allen anderen Stellen.
Umrechnung von Binärzahlen in Dezimalzahlen
Die Umrechnung von Binärzahlen in Dezimalzahlen ist vergleichsweise einfach und basiert auf der Berechnung der Stellenwerte im Binärsystem.
Methode:
- Identifiziere jede Stelle in der Binärzahl und ihre Position (von rechts nach links beginnend bei 0).
- Multipliziere jede Binärziffer (0 oder 1) mit dem Wert von 2 hoch der Stellenposition.
- Addiere alle resultierenden Werte zusammen.
Beispiel: Umrechnung von 10110₂ ins Dezimalsystem
Lassen Sie uns die Binärzahl 10110 in eine Dezimalzahl umrechnen:
Position (von rechts) | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|
Binäre Ziffer | 1 | 0 | 1 | 1 | 0 |
Berechnung | 1 · 2⁴ | 0 · 2³ | 1 · 2² | 1 · 2¹ | 0 · 2⁰ |
Dezimalwert | 16 | 0 | 4 | 2 | 0 |
Nun addieren wir alle Dezimalwerte: 16 + 0 + 4 + 2 + 0 = 22
Also ist 10110₂ im Binärsystem gleich 22 im Dezimalsystem.
Formel:
Für eine Binärzahl mit n Stellen (b₀, b₁, …, bₙ₋₁) gilt:
Dezimalzahl = b₀ · 2⁰ + b₁ · 2¹ + b₂ · 2² + … + bₙ₋₁ · 2ⁿ⁻¹
wobei b₀ die erste Stelle von rechts ist.
Praktischer Trick:
Bei der Umrechnung kann man auch eine Tabelle mit den Stellenwerten erstellen:
2⁷ | 2⁶ | 2⁵ | 2⁴ | 2³ | 2² | 2¹ | 2⁰ |
---|---|---|---|---|---|---|---|
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
Man schreibt die Binärzahl unter die Tabelle und addiert nur die Werte, an deren Position eine 1 steht.
Binärcodierung von Strings
In der Informatik werden Textzeichen (Strings) durch binäre Codes repräsentiert. Bei Unicode-Zeichen wird eine fortschrittliche Codierung verwendet, um sowohl einfache als auch komplexe Schriftzeichen aus allen Sprachen der Welt darstellen zu können.
Unicode: Ein universeller Zeichencode
Unicode ist ein internationaler Standard zur Darstellung von Textzeichen aller Schriftsysteme. Jedes Zeichen erhält eine eindeutige Nummer (Codepoint), z.B. hat der Buchstabe “A” den Codepoint U+0041 (dezimal: 65).
UTF-8: Die häufigste Unicode-Codierung
UTF-8 ist die am weitesten verbreitete Codierungsform für Unicode. Sie hat folgende Eigenschaften:
- Variable Länge: Ein Zeichen wird mit 1 bis 4 Bytes codiert
- Abwärtskompatibilität: ASCII-Zeichen (0-127) werden mit nur 1 Byte dargestellt
- Selbstsynchronisierend: Der Anfang eines Zeichens ist eindeutig erkennbar
UTF-8 Codierungsschema:
Anzahl Bytes | Binärmuster | Codepoint-Bereich |
---|---|---|
1 | 0xxxxxxx |
U+0000 bis U+007F |
2 | 110xxxxx 10xxxxxx |
U+0080 bis U+07FF |
3 | 1110xxxx 10xxxxxx 10xxxxxx |
U+0800 bis U+FFFF |
4 | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx |
U+10000 bis U+10FFFF |
Die mit x
markierten Stellen werden mit den Bits des Unicode-Codepoints gefüllt.
Beispiel: Codierung deutscher Umlaute
Nehmen wir als Beispiel den Buchstaben “ü” (U+00FC):
- Der Codepoint von “ü” ist U+00FC (dezimal: 252)
- Als Binärzahl: 11111100
- Da der Wert > 127 ist, benötigen wir 2 Bytes
- Nach dem 2-Byte-Schema:
110xxxxx 10xxxxxx
- Wir füllen den Unicode-Wert ein:
110(00000) 10(111100)
→11000011 10111100
- Somit wird “ü” als die zwei Bytes
11000011 10111100
codiert
Weiteres Beispiel: Das Pi-Symbol π
- Der Codepoint von “π” ist U+03C0 (dezimal: 960)
- Als Binärzahl: 0000001111000000
- Da der Wert > 127 und < 2048 ist, benötigen wir 2 Bytes
- Nach dem 2-Byte-Schema:
110xxxxx 10xxxxxx
- Wir füllen den Unicode-Wert ein:
110(00111) 10(100000)
→11000111 10100000
- Somit wird “π” als die zwei Bytes
11000111 10100000
codiert (hexadezimal: CE A0)
Beispiel: ‘Informatik ist interessant.’
Lassen Sie uns den Satz “Informatik ist interessant.” in die binäre UTF-8-Kodierung umwandeln:
Zeichen | Unicode-Codepoint | Dezimal | Binär | UTF-8 Kodierung |
---|---|---|---|---|
I | U+0049 | 73 | 1001001 | 01001001 |
n | U+006E | 110 | 1101110 | 01101110 |
f | U+0066 | 102 | 1100110 | 01100110 |
o | U+006F | 111 | 1101111 | 01101111 |
r | U+0072 | 114 | 1110010 | 01110010 |
m | U+006D | 109 | 1101101 | 01101101 |
a | U+0061 | 97 | 1100001 | 01100001 |
t | U+0074 | 116 | 1110100 | 01110100 |
i | U+0069 | 105 | 1101001 | 01101001 |
k | U+006B | 107 | 1101011 | 01101011 |
␣ | U+0020 | 32 | 100000 | 00100000 |
i | U+0069 | 105 | 1101001 | 01101001 |
s | U+0073 | 115 | 1110011 | 01110011 |
t | U+0074 | 116 | 1110100 | 01110100 |
␣ | U+0020 | 32 | 100000 | 00100000 |
i | U+0069 | 105 | 1101001 | 01101001 |
n | U+006E | 110 | 1101110 | 01101110 |
t | U+0074 | 116 | 1110100 | 01110100 |
e | U+0065 | 101 | 1100101 | 01100101 |
r | U+0072 | 114 | 1110010 | 01110010 |
e | U+0065 | 101 | 1100101 | 01100101 |
s | U+0073 | 115 | 1110011 | 01110011 |
s | U+0073 | 115 | 1110011 | 01110011 |
a | U+0061 | 97 | 1100001 | 01100001 |
n | U+006E | 110 | 1101110 | 01101110 |
t | U+0074 | 116 | 1110100 | 01110100 |
. | U+002E | 46 | 101110 | 00101110 |
Da alle Zeichen in diesem Beispiel im ASCII-Bereich liegen (0-127), wird jedes Zeichen mit genau einem Byte codiert. Der vollständige Text benötigt also 27 Bytes im UTF-8 Format.
Die komplette binäre Darstellung des Textes ist:
01001001 01101110 01100110 01101111 01110010 01101101 01100001 01110100
01101001 01101011 00100000 01101001 01110011 01110100 00100000 01101001
01101110 01110100 01100101 01110010 01100101 01110011 01110011 01100001
01101110 01110100 00101110
In hexadezimaler Schreibweise:
49 6E 66 6F 72 6D 61 74 69 6B 20 69 73 74 20 69 6E 74 65 72 65 73 73 61 6E 74 2E
Dieser String kann direkt in einem Computer gespeichert und verarbeitet werden. In Textdateien, bei der Übertragung im Internet oder in Datenbanken sind Strings immer in solchen binären Formaten gespeichert.
Vorteile der Unicode-Codierung:
- Universalität: Alle Schriftsysteme und Sonderzeichen können dargestellt werden
- Effizienz: Häufig verwendete Zeichen benötigen weniger Speicherplatz
- Kompatibilität: Rückwärtskompatibel mit ASCII, was die Integration erleichtert
Die Umwandlung zwischen Textzeichen und ihrer binären Repräsentation wird in Computersystemen automatisch durch Codierungs- und Decodierungsprozesse abgewickelt, sodass Benutzer sich in der Regel nicht mit den Details befassen müssen.