Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
modul:m114:learningunits:lu01:binaereganzzahlen [2025/02/06 13:39] – [Binär codierte Ganzzahlen] kmaurizimodul: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 ''int'', ''short'' und ''long'' verwendet. Diese Codierung wird unter anderem für Variablen vom Typ ''int'', ''short'' und ''long'' verwendet.
 Die Zahlen werden einfach im binären Zahlensystem (siehe auch [[modul:m114:learningunits:lu01:zahlensysteme]]) gespeichert und verarbeitet. Die Zahlen werden einfach im binären Zahlensystem (siehe auch [[modul:m114:learningunits:lu01:zahlensysteme]]) gespeichert und verarbeitet.
-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://de.wikipedia.org/wiki/Ganze_Zahl|"Ganzen Zahlen"]]. +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://de.wikipedia.org/wiki/Ganze_Zahl|"Ganzen Zahlen"]]. Negative Zahlen werden dabei durch das Vorzeichen-Bit identifiziert.  
 + 
 +  * Wenn das vorderste Bit ''0'' ist, handelt es sich um eine positive Zahl. 
 +  * Ist es ''1'', so wird die Zahl als negativ interpretiert.
  
 ==== Zahlenkreis statt Zahlenstrahl ==== ==== Zahlenkreis statt Zahlenstrahl ====
Zeile 21: Zeile 24:
  
 Wenn beispielsweise ein 8-Bit-Datentyp wie ''byte'' verwendet wird, liegt der Wertebereich bei -128 bis 127. Wird der höchste Wert 127 um 1 erhöht, erfolgt ein Überlauf (Wrap around) und es wird wieder beim kleinsten Wert -128 angesetzt. Somit folgt auf den maximalen positiven Wert unmittelbar der minimal negative Wert – als ob die Zahlenwerte auf einem Kreis angeordnet wären. Wenn beispielsweise ein 8-Bit-Datentyp wie ''byte'' verwendet wird, liegt der Wertebereich bei -128 bis 127. Wird der höchste Wert 127 um 1 erhöht, erfolgt ein Überlauf (Wrap around) und es wird wieder beim kleinsten Wert -128 angesetzt. Somit folgt auf den maximalen positiven Wert unmittelbar der minimal negative Wert – als ob die Zahlenwerte auf einem Kreis angeordnet wären.
 +
 +{{:modul:m114:learningunits:lu01:zehlenkreis.gif?400|}}
  
 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, da das Rechnen im fest definierten, kreisförmigen Wertebereich erfolgt. 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, da das Rechnen im fest definierten, kreisförmigen Wertebereich erfolgt.
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<sub>2</sub>178+0011 0010<sub>2</sub>50
  
 Wie das geht, erfahren Sie im Kapitel [[modul:m114:learningunits:lu01:umrechnentheorie]]. Wie das geht, erfahren Sie im Kapitel [[modul:m114:learningunits:lu01:umrechnentheorie]].
Zeile 34: Zeile 39:
 //Siehe auch [[http://de.wikipedia.org/wiki/Zweierkomplement]]// //Siehe auch [[http://de.wikipedia.org/wiki/Zweierkomplement]]//
  
-In der Informatik wird für binäre Ganzzahlen das Zweierkomplement verwendet.+In der Informatik wird für negative binäre Ganzzahlen das Zweierkomplement verwendet.
 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:m114:learningunits:lu02:binaermath]]. Mehr dazu erfahren Sie im Kapitel [[modul:m114:learningunits:lu02:binaermath]].
  
-Für positive Zahlen bedeutet das Zweierkomplement nur, dass die erste binäre Stelle Bit '0' sein muss.+Für positive Zahlen: Im Zweierkomplement ist das höchstwertige Bit das Vorzeichenbit. Ist es 0, handelt es sich um eine positive Zahl, deren Wert sich direkt aus der normalen Binärdarstellung ergibt.
  
 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<sub>10</sub> - 1<sub>10</sub> = **-13<sub>10</sub>**   - Subtrahieren Sie 1 von der Zahl: -12<sub>10</sub> - 1<sub>10</sub> = **-13<sub>10</sub>**
  
-== 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. 
 +</WRAP> 
 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:
 {{:modul:m114:learningunits:lu01:zweierkomplement.png?600|}} {{:modul:m114:learningunits:lu01:zweierkomplement.png?600|}}
  
-=== 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 ...  
-  * '0' => positive Zahl. 
-  * '1' => negative Zahl. 
  
-Zum Speichern der Zahlen ist diese Lösung problemlos. 
-Weniger als 1 Bit um das Vorzeichen darzustellen, können wir gar nicht verwenden. 
- 
-Wie sieht es aber beim Rechnen mit diesen Zahlen aus? 
- 
-| <code> 
-    6 
-  + 9 
-  --- 
-   15  
-</code> | <code> 
-  0000 0110 
-+ 0000 1001 
------------ 
-  0000 1111 
-</code> | <code> 
-  12 
--  4 
----- 
-   8 
-</code> | <code> 
-  0000 1100 
-- 0000 0100 
------------ 
-  0000 1000 
-</code> 
-| <code> 
-   18 
-+  -6 
------ 
-   12 
-</code> | <code> 
-  0001 0010 
-+ 1000 0110 
------------ 
-  0000 1100 
- 
-</code> | <code> 
-  -5 
--  3 
----- 
-  -8 
-</code> | <code> 
-  1000 0101 
-- 0000 0011 
------------ 
-  1000 1000 
-</code> | 
- 
-<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> 
  
 ===== Wrap around ===== ===== Wrap around =====
  • modul/m114/learningunits/lu01/binaereganzzahlen.1738845570.txt.gz
  • Zuletzt geändert: 2025/02/06 13:39
  • von kmaurizi