Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
| modul:m114:learningunits:lu01:binaereganzzahlen [2025/02/06 13:41] – [Zahlenkreis statt Zahlenstrahl] kmaurizi | modul:m114:learningunits:lu01:binaereganzzahlen [2025/02/27 09:45] (aktuell) – kmaurizi | ||
|---|---|---|---|
| Zeile 14: | Zeile 14: | ||
| Diese Codierung wird unter anderem für Variablen vom Typ '' | Diese Codierung wird unter anderem für Variablen vom Typ '' | ||
| Die Zahlen werden einfach im binären Zahlensystem (siehe auch [[modul: | Die Zahlen werden einfach im binären Zahlensystem (siehe auch [[modul: | ||
| - | Auf das Speichern und Verarbeiten von Brüchen wird bewusst verzichtet. Die binär codierten Ganzzahlen können nicht bloss positive Zahlen darstellen, sondern haben den Wertebereich der [[https:// | + | Auf das Speichern und Verarbeiten von Brüchen wird bewusst verzichtet. Die binär codierten Ganzzahlen können nicht bloss positive Zahlen darstellen, sondern haben den Wertebereich der [[https:// |
| + | |||
| + | * Wenn das vorderste Bit '' | ||
| + | * Ist es '' | ||
| ==== Zahlenkreis statt Zahlenstrahl ==== | ==== Zahlenkreis statt Zahlenstrahl ==== | ||
| Zeile 21: | Zeile 24: | ||
| Wenn beispielsweise ein 8-Bit-Datentyp wie '' | Wenn beispielsweise ein 8-Bit-Datentyp wie '' | ||
| + | |||
| {{: | {{: | ||
| + | |||
| Dieses kreisförmige Modell erklärt, warum bei binär codierten Ganzzahlen herkömmliche Konzepte wie ein unendlicher Zahlenstrahl nicht mehr sinnvoll sind. Alle arithmetischen Operationen müssen den Wrap-around-Effekt berücksichtigen, | Dieses kreisförmige Modell erklärt, warum bei binär codierten Ganzzahlen herkömmliche Konzepte wie ein unendlicher Zahlenstrahl nicht mehr sinnvoll sind. Alle arithmetischen Operationen müssen den Wrap-around-Effekt berücksichtigen, | ||
| ==== Positive Zahlen ==== | ==== Positive Zahlen ==== | ||
| Zeile 27: | Zeile 32: | ||
| Um diesen binären Code als Dezimalzahl zu lesen, übertragen Sie den Wert einfach ins 10er System. | Um diesen binären Code als Dezimalzahl zu lesen, übertragen Sie den Wert einfach ins 10er System. | ||
| - | 1011 0010< | + | 0011 0010< |
| Wie das geht, erfahren Sie im Kapitel [[modul: | Wie das geht, erfahren Sie im Kapitel [[modul: | ||
| Zeile 34: | Zeile 39: | ||
| //Siehe auch [[http:// | //Siehe auch [[http:// | ||
| - | In der Informatik wird für binäre Ganzzahlen das Zweierkomplement verwendet. | + | In der Informatik wird für negative |
| Mit dieser Technik können Rechenoperationen ohne spezielle Regeln für positive und negative Zahlen eingesetzt werden. | Mit dieser Technik können Rechenoperationen ohne spezielle Regeln für positive und negative Zahlen eingesetzt werden. | ||
| Mehr dazu erfahren Sie im Kapitel [[modul: | Mehr dazu erfahren Sie im Kapitel [[modul: | ||
| - | Für positive Zahlen | + | Für positive Zahlen: Im Zweierkomplement |
| Für negative Zahlen gehen Sie wie folgt vor: | Für negative Zahlen gehen Sie wie folgt vor: | ||
| Zeile 55: | Zeile 60: | ||
| - Subtrahieren Sie 1 von der Zahl: -12< | - Subtrahieren Sie 1 von der Zahl: -12< | ||
| - | == Umwandlung ins Zweierkomplement von Hand == | + | === Umwandlung ins Zweierkomplement von Hand === |
| + | <WRAP center round tip 60%> | ||
| + | Trick zur schnelleren Umwandlung (einer negativen in eine positive Binärzahl oder umgekehrt) von Hand: Von rechts angefangen, alle Nullen und die erste Eins abschreiben und alle nachfolgenden Stellen invertieren. | ||
| + | </ | ||
| Dieser Programmablaufplan zeigt, wie Sie das Zweierkomplement einer binären Zahl ohne zu rechnen erhalten. | Dieser Programmablaufplan zeigt, wie Sie das Zweierkomplement einer binären Zahl ohne zu rechnen erhalten. | ||
| Dies stellt eine Alternative zum oben beschriebenen Vorgehen dar: | Dies stellt eine Alternative zum oben beschriebenen Vorgehen dar: | ||
| Zeile 61: | Zeile 70: | ||
| {{: | {{: | ||
| - | === Wieso kein Vorzeichen? === | ||
| - | Auf den ersten Blick scheint die Lösung mit dem Zweierkomplement umständlich. | ||
| - | Wäre es nicht einfacher, das erste Bit als Vorzeichen zu verwenden? | ||
| - | Zum Beispiel: Das erste Bit ist ... | ||
| - | * ' | ||
| - | * ' | ||
| - | Zum Speichern der Zahlen ist diese Lösung problemlos. | ||
| - | Weniger als 1 Bit um das Vorzeichen darzustellen, | ||
| - | |||
| - | Wie sieht es aber beim Rechnen mit diesen Zahlen aus? | ||
| - | |||
| - | | < | ||
| - | 6 | ||
| - | + 9 | ||
| - | --- | ||
| - | | ||
| - | </ | ||
| - | 0000 0110 | ||
| - | + 0000 1001 | ||
| - | ----------- | ||
| - | 0000 1111 | ||
| - | </ | ||
| - | 12 | ||
| - | - 4 | ||
| - | ---- | ||
| - | 8 | ||
| - | </ | ||
| - | 0000 1100 | ||
| - | - 0000 0100 | ||
| - | ----------- | ||
| - | 0000 1000 | ||
| - | </ | ||
| - | | < | ||
| - | 18 | ||
| - | + -6 | ||
| - | ----- | ||
| - | 12 | ||
| - | </ | ||
| - | 0001 0010 | ||
| - | + 1000 0110 | ||
| - | ----------- | ||
| - | 0000 1100 | ||
| - | |||
| - | </ | ||
| - | -5 | ||
| - | - 3 | ||
| - | ---- | ||
| - | -8 | ||
| - | </ | ||
| - | 1000 0101 | ||
| - | - 0000 0011 | ||
| - | ----------- | ||
| - | 1000 1000 | ||
| - | </ | ||
| - | |||
| - | <WRAP center round info 60%> | ||
| - | In der ersten Zeile konnten wir noch einfach wie im Dezimalsystem rechnen. | ||
| - | Sobald negative Zahlen hinzu kommen, müssen wir aber das Vorzeichen separat behandeln. | ||
| - | Wir stellen fest, dass wir unterschiedliche Rechenregeln für positive und negative Zahlen brauchen. | ||
| - | Deshalb ist die Lösung mit dem ersten Bit als Vorzeichen nicht sinnvoll. | ||
| - | </ | ||
| ===== Wrap around ===== | ===== Wrap around ===== | ||