j11:codierung:start
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
j11:codierung:start [2023/06/13 06:06] – Martin Pabst | j11:codierung:start [2023/06/13 07:15] (aktuell) – Martin Pabst | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== Codierung ====== | + | ====== Codierung |
===== Darstellung einer Zahl in verschiedenen Stellenwertsystemen ===== | ===== Darstellung einer Zahl in verschiedenen Stellenwertsystemen ===== | ||
<WRAP center round info 80%> | <WRAP center round info 80%> | ||
- | **Stellenwertsystem*** | + | **Stellenwertsystem** |
- | Ein **Stellenwertsystem** ermöglicht die eindeutige Darstellung jeder natürlichen Zahl unter Verwendung einer begrenzten Menge von **Zahlzeichen**. Wir kennen | + | Ein **Stellenwertsystem** ermöglicht die eindeutige Darstellung jeder natürlichen Zahl unter Verwendung einer begrenzten Menge von **Zahlzeichen**. |
+ | $$n = a_0\cdot b^0 + a_1\cdot b^1 + a_2\cdot b^2 + \ldots + a_k\cdot b^k\ (k\in\mathbb{N}), | ||
+ | wobei die Koeffizienten $a_0, a_1, \ldots, a_k$ jeweils aus der Menge ${0, 1, \ldots, b - 1}$ stammen. Jeder Koeffizient lässt sich daher eindeutig durch eines der $b$ Zahlzeichen darstellen und die Zahl $n$ durch Hintereinanderschreiben der den Koeffizienten $a_k, a_{ k-1 }, ..., a_0$ zugeordneten Zahlzeichen. \\ | ||
+ | Das alles ist auf den ersten Blick sicher etwas abstrakt, es wird aber klar, wenn wir es am uns am Stellenwertsystem zur Basis $10$, dem uns vertrauten Zehnersystem, | ||
+ | \\ \\ | ||
+ | **Zehnersystem** \\ | ||
+ | Das Zehnersystem hat die Basis $b = 10$ und die Zahlzeichen $0, 1, 2, 3, 4, 5, 6, 7, 8, 9$. Jede natürliche Zahl $n\in\mathbb{N}$ lässt sich darstellen als Summe | ||
+ | $$n = a_0\cdot10^0 + a_1\cdot10^1 + a_2\cdot10^2 + \ldots + a_k\cdot10^k\ (k\in\mathbb{N})$$ | ||
+ | Zur Angabe von $n$ reicht es also, die Koeffizienten $a_0, a_1, \ldots, a_k$ anzugeben. Man schreibt sie einfach direkt hintereinander auf. | ||
+ | {{ : | ||
+ | \\ **Beispiel: | ||
+ | Die Anzahl $n$ der blauen Punkte rechts lässt sich schreiben als | ||
+ | $$n = 5\cdot10^0 + 3\cdot10^1$$ | ||
+ | Wir nehmen daher das 6. und das 4. Zahlzeichen und schreiben sie (beginnend mit dem höherwertigsten) hintereinander an. So gelangen wir zur Darstellung " | ||
+ | **Hexadezimalsystem** \\ | ||
+ | Stell dir vor, wir wären | ||
+ | $$n = a_0\cdot 16^0 + a_1\cdot 16^1 + a_2\cdot 16^2 + \ldots + a_k\cdot 16^k\ (k\in\mathbb{N})$$ | ||
+ | {{ : | ||
+ | **Beispiel: | ||
+ | Die Anzahl der roten Kreise im Bild rechts lässt sich schreiben als | ||
+ | $$13\cdot 16^0 + 2\cdot 16^1$$ | ||
+ | Entsprechend verwenden wir zur Darstellung das 14. und das 3. Zahlzeichen: | ||
+ | \\ \\ | ||
+ | **Binärsystem** \\ | ||
+ | 16 verschiedene Zahlzeichen sind aufs Erste recht unhandlich (obgleich das in der Informatik sehr vorteilhaft ist, dazu später mehr). Versuchen wir es daher mal mit einer möglichst kleinen Basis. Die Zahl 1 lässt sich nicht verwenden (überlege selbst, warum!), aber mit $b = 2$ funktioniert es schon! Wir brauchen in diesem Fall nur zwei Zahlzeichen $0$ und $1$. Die Wertigkeiten der Stellen sind $2^0, 2^1, 2^2, \ldots$, also $1, 2, 4, 8, 16, 32, \ldots$. | ||
+ | \\ \\ | ||
+ | **Beispiel: | ||
+ | Wir wollen die Zahl der blauen Kreise oben (" | ||
+ | $$25 = 1\cdot 16 + 9$$ | ||
+ | $$9 = 1\cdot 8 + 1$$ | ||
+ | $$1 = 0\cdot 4 + 1$$ | ||
+ | $$1 = 0\cdot 2 + 1$$ | ||
+ | $$1 = 1\cdot 1 + 1$$ | ||
+ | Wir gelangen so zur Summe | ||
+ | $$25 = 1\cdot 2^0 + 0\cdot 2^1 + 0\cdot 2^2 + 1\cdot 2^3 + 1\cdot 2^4$$ | ||
+ | und damit zur Darstellung " | ||
</ | </ | ||
+ | |||
+ | TODO: Übungen, Algorithmus mit Modulo-Operator | ||
Zeile 17: | Zeile 55: | ||
println(nsc.toBinary(11)); | println(nsc.toBinary(11)); | ||
println(nsc.toHex(49152)); | println(nsc.toHex(49152)); | ||
+ | |||
+ | println(nsc.parseHex(" | ||
Zeile 63: | Zeile 103: | ||
| | ||
} | } | ||
+ | |||
+ | | ||
+ | int wertigkeit = 1; | ||
+ | int zahl = 0; | ||
+ | for (int position = zahlAlsString.length() - 1; position >= 0; position--) { | ||
+ | char zahlzeichen = zahlAlsString.toUpperCase().charAt(position); | ||
+ | int zahlzeichenIndex = hexDigits.indexOf(zahlzeichen); | ||
+ | |||
+ | zahl = zahl + zahlzeichenIndex * wertigkeit; | ||
+ | | ||
+ | } | ||
+ | return zahl; | ||
+ | } | ||
+ | |||
+ | |||
+ | |||
} | } | ||
</ | </ |
j11/codierung/start.1686636371.txt.gz · Zuletzt geändert: 2023/06/13 06:06 von Martin Pabst