Binäre Datentypen — Änderungen 7142 → 7670

Zeile 1: Zeile 1:
 +
{{TODO|Fließkommazahlen beschreiben}}
 +
 
==Einführung in Zahlensysteme==
 
==Einführung in Zahlensysteme==
  
Zeile 19: Zeile 21:
 
  3458<sub>(10)</sub> = <b>3</b>*1000 + <b>4</b>*100 + <b>5</b>*10 + <b>8</b>*1
 
  3458<sub>(10)</sub> = <b>3</b>*1000 + <b>4</b>*100 + <b>5</b>*10 + <b>8</b>*1
  
−
Nun wir befinden uns im Dezimalsystem und es fällt auf, dass *zufällig* jeder 2. Faktor der Produkte als eine Potenz von 10 darstellbar ist:
+
Nun wir befinden uns im Dezimalsystem und es fällt auf, dass „zufällig“ jeder 2. Faktor der Produkte als eine Potenz von 10 darstellbar ist:
  
 
  3458<sub>(10)</sub> = <b>3</b>*10<sup>3</sup> + <b>4</b>*10<sup>2</sup> + <b>5</b>*10<sup>1</sup> + <b>8</b>*10<sup>0</sup>
 
  3458<sub>(10)</sub> = <b>3</b>*10<sup>3</sup> + <b>4</b>*10<sup>2</sup> + <b>5</b>*10<sup>1</sup> + <b>8</b>*10<sup>0</sup>
Zeile 25: Zeile 27:
 
===Dualzahlen===
 
===Dualzahlen===
  
−
Das Dualsystem funktioniert ganz genauso. Nur mit dem Unterschied, dass keine 10er-Potenzen benutzt werden, sondern 2er-Potenzen. Also:
+
Das Dualsystem funktioniert ganz genauso, nur mit dem Unterschied, dass keine 10er-Potenzen benutzt werden, sondern 2er-Potenzen. Also:
  
 
  10101<sub>(2)</sub> = <b>1</b>*2<sup>4</sup> + <b>0</b>*2<sup>3</sup> + <b>1</b>*2<sup>2</sup> + <b>0</b>*2<sup>1</sup> + <b>1</b>*2<sup>0</sup> = 16 + 0 + 4 + 0 + 1 = 21<sub>(10)</sub>
 
  10101<sub>(2)</sub> = <b>1</b>*2<sup>4</sup> + <b>0</b>*2<sup>3</sup> + <b>1</b>*2<sup>2</sup> + <b>0</b>*2<sup>1</sup> + <b>1</b>*2<sup>0</sup> = 16 + 0 + 4 + 0 + 1 = 21<sub>(10)</sub>
Zeile 35: Zeile 37:
 
Das MSB (<b>M</b>ost <b>S</b>ignificant <b>B</b>it) und das LSB (<b>L</b>east <b>S</b>ignificant <b>B</b>it) sind die Bezeichnungen von zwei besonderen Bits einer Dualzahl.
 
Das MSB (<b>M</b>ost <b>S</b>ignificant <b>B</b>it) und das LSB (<b>L</b>east <b>S</b>ignificant <b>B</b>it) sind die Bezeichnungen von zwei besonderen Bits einer Dualzahl.
  
−
<br>Das <font color=red><b>MSB</b></font> ist das höchstwertige Bit. D.h. das Bit einer Dualzahl mit der höchsten 2er-Potenz.
+
<br>Das <font color=red><b>MSB</b></font> ist das höchstwertige Bit. D.&nbsp;h. das Bit einer Dualzahl mit der höchsten 2er-Potenz.
−
<br>Das <font color=blue><b>LSB</b></font> ist das niedrigwertigste Bit, D.h. immer das Bit mit der Wertigkeit 2<sup>0</sup>.
+
<br>Das <font color=blue><b>LSB</b></font> ist das niedrigwertigste Bit, d.&nbsp;h. immer das Bit mit der Wertigkeit 2<sup>0</sup>.
  
 
  <font color=red>1</font>1001<font color=blue>0</font><sub>(2)</sub>
 
  <font color=red>1</font>1001<font color=blue>0</font><sub>(2)</sub>
Zeile 43: Zeile 45:
  
 
===Begriffserklärung===
 
===Begriffserklärung===
−
Codierung - Jeder hat wahrscheinlich diesen Begriff schonmal gehört. Aber was bedeutet "Codierung" eigentlich? Schauen wir uns an was das "große" Wikipedia dazu sagt:
+
Codierung – jeder hat wahrscheinlich diesen Begriff schonmal gehört. Aber was bedeutet „Codierung“ eigentlich? Schauen wir uns an, was die große Wikipedia dazu sagt:
  
−
<i><blockquote>Im Allgemeinen ist ein Code eine Vereinbarung über einen Satz (eine Menge) von Symbolen [..] zum Zweck des Informationsaustauschs.</blockquote></i>
+
<i><blockquote>Im Allgemeinen ist ein Code eine Vereinbarung über einen Satz (eine Menge) von Symbolen […] zum Zweck des Informationsaustauschs.</blockquote></i>
  
 
Was heißt das nun?  
 
Was heißt das nun?  
  
−
Ich bin mir sicher, dass du dir sicher schonmal (als Kind) darüber Gedanken gemacht hast warum ein Baum "Baum" heißt und nicht "Stuhl". Wahrscheinlich hast du von deinen Eltern die Antwort bekommen, dass es eben so sei.
+
Ich bin mir sicher, dass du dir sicher schonmal (als Kind) darüber Gedanken gemacht hast warum ein Baum „Baum“ heißt und nicht „Stuhl“. Wahrscheinlich hast du von deinen Eltern die Antwort bekommen, dass es eben so sei.
  
−
Nun als du damals gelernt hast zu sprechen, da hast du erstmal eine ganze Weile nur deinen Eltern zugehört. Und aus dem jeweiligen Zusammenhang heraus hast du dir gemerkt, dass ein "Baum" sowas ist was meistens draußen rumsteht, einen braunen Stamm hat, mit Ästen und (meistens) grünen Blätteren dran.  
+
Nun, als du damals gelernt hast zu sprechen, da hast du erstmal eine ganze Weile nur deinen Eltern zugehört. Und aus dem jeweiligen Zusammenhang heraus hast du dir gemerkt, dass ein „Baum“ sowas ist, was meistens draußen rumsteht, einen braunen Stamm hat, mit Ästen und (meistens) grünen Blätteren dran.  
−
Du hast also das Wort, bzw. damals wohl eher nur den Laut, den deine Eltern gemacht haben als sie beispielsweise auf einem Baum gezeigt haben, mit diesem Objekt assoziiert, was da draußen im Garten stand.
+
Du hast also das Wort, bzw. damals wohl eher nur den Laut, den deine Eltern gemacht haben, als sie beispielsweise auf einen Baum gezeigt haben, mit diesem Objekt assoziiert, was da draußen im Garten stand.
  
−
Und das war schon eine Codierung. Du hast einem an sich bedeutungslosen Laut, der erzeugt wird wenn Menschen "Baum" sagen eine Bedeutung gegeben.
+
Und das war schon eine Codierung. Du hast einem an sich bedeutungslosen Laut, der erzeugt wird, wenn Menschen „Baum“ sagen, eine Bedeutung gegeben.
  
 
Man kann also genauso einen eigenen Code erzeugen, den dann jeder verstehen kann, der dessen Bedeutung kennt, mit dem du also eine Bedeutung <b>vereinbart</b> (--> siehe Zitat aus Wikipedia) hast.
 
Man kann also genauso einen eigenen Code erzeugen, den dann jeder verstehen kann, der dessen Bedeutung kennt, mit dem du also eine Bedeutung <b>vereinbart</b> (--> siehe Zitat aus Wikipedia) hast.
Zeile 63: Zeile 65:
 
! Code  || Bedeutung
 
! Code  || Bedeutung
 
|-
 
|-
−
| "Harry"   || Du
+
| „Harry“   || Du
 
|-
 
|-
−
| "Blumen" || abwaschen
+
| „Blumen“ || abwaschen
 
|-
 
|-
−
| "kauft"   || musst
+
| „kauft“   || musst
 
|-
 
|-
−
| "rote"   || nicht
+
| „rote“   || nicht
 
|-
 
|-
 
|}
 
|}
  
−
Wenn du jetzt also mit jmd diese Codierung vereinbarst und ihm dann sagst:
+
Wenn du jetzt also mit jemandem diese Codierung vereinbarst und ihm dann sagst:
  
 
  Harry kauft Blumen
 
  Harry kauft Blumen
Zeile 82: Zeile 84:
  
 
würde dementsprechend bedeuten, dass die angesprochene Person <b>nicht</b> abwaschen muss (==> Du musst nicht abwaschen)
 
würde dementsprechend bedeuten, dass die angesprochene Person <b>nicht</b> abwaschen muss (==> Du musst nicht abwaschen)
−
Allerdings wird dich wahrscheinlich jeder, der diese Code nicht kennt nur fragend anschauen.
+
Allerdings wird dich wahrscheinlich jeder, der diese Code nicht kennt, nur fragend anschauen.
  
 
===Codierung von (Dual)Zahlen===
 
===Codierung von (Dual)Zahlen===
  
−
Wie oben schon erklärt bzw. angedeutet sind Dualzahlen so codiert, dass der Wert einer Dualzahl die Summe aller Produkte der i-ten Ziffer (i= 0..n) mit 2<sup>i</sup>
+
Wie oben schon erklärt bzw. angedeutet sind Dualzahlen so codiert, dass der Wert einer Dualzahl die Summe aller Produkte der i-ten Ziffer (i&nbsp;=&nbsp;0&nbsp;–&nbsp;n) mit 2<sup>i</sup>
  
 
Hier eine Tabelle mit der Codierung aller 3-Bit Zahlen.
 
Hier eine Tabelle mit der Codierung aller 3-Bit Zahlen.
Zeile 113: Zeile 115:
 
Analoges gilt natürlich wie oben beschrieben auch für alle längeren Dualzahlen.
 
Analoges gilt natürlich wie oben beschrieben auch für alle längeren Dualzahlen.
  
−
Genauso könnte man aber auch folgendes vereinbaren (d.h. codieren)
+
Genauso könnte man aber auch folgendes vereinbaren (d.&nbsp;h. codieren)
  
 
{| {{Prettytable}}
 
{| {{Prettytable}}
Zeile 140: Zeile 142:
 
==Natürliche Zahlen==
 
==Natürliche Zahlen==
  
−
Natürliche Zahlen sind die Zahlen die wir wohl alle noch aus der Grundschule kennen. Die Menge der natürlichen Zahlen enthält alle positiven Zahlen inklusive der 0. Diese Zahlen lassen sich in binärer Darstellung wunderbar darstellen, denn die Codierung entspricht der "Standard-Codierung" mit den 2er-Potenzen.
+
Natürliche Zahlen sind die Zahlen, die wir wohl alle noch aus der Grundschule kennen. Die Menge der natürlichen Zahlen enthält alle positiven Zahlen inklusive der 0. Diese Zahlen lassen sich in binärer Darstellung wunderbar darstellen, denn die Codierung entspricht der „Standard-Codierung“ mit den 2er-Potenzen.
  
 
==Ganze Zahlen==
 
==Ganze Zahlen==
Zeile 146: Zeile 148:
 
===Lineare Codierung===
 
===Lineare Codierung===
  
−
Oben hatte ich bereits eine Codierung vorgestellt, die in 3 Bit die Zahlen -3 bis +4 codiert hat. Dabei wurde eine untere Grenze gewählt (in dem Fall -3) und dann wurde "hochgezählt" bis wir schließlich dem letzten Code (111<sup>(2)</sup>) den Wert 4 zugeordnet hatten.
+
Oben hatte ich bereits eine Codierung vorgestellt, die in 3 Bit die Zahlen -3 bis +4 codiert hat. Dabei wurde eine untere Grenze gewählt (in dem Fall -3) und dann wurde „hochgezählt“ bis wir schließlich dem letzten Code (111<sup>(2)</sup>) den Wert 4 zugeordnet hatten.
  
−
Das scheint erstmal ganz gut zu funktionieren. Ist aber dennoch etwas unübersichtlich und die -3 kann mit dieser Methode in einer n-Bit Codierung schon ganz anders aussehen. Das nächste Problem ist, dass man mit dieser Codierung nicht ohne weiteres rechnen kann.
+
Das scheint erstmal ganz gut zu funktionieren. Ist aber dennoch etwas unübersichtlich und die -3 kann mit dieser Methode in einer n-Bit-Codierung schon ganz anders aussehen. Das nächste Problem ist, dass man mit dieser Codierung nicht ohne weiteres rechnen kann.
  
 
Nehmen wir aus obiger Tabelle folgende Zahlen und addieren sie:
 
Nehmen wir aus obiger Tabelle folgende Zahlen und addieren sie:
Zeile 159: Zeile 161:
 
</pre>
 
</pre>
  
−
Scheinbar scheint das Ergebnis nicht ganz zu stimmen *g*
+
Offensichtlich scheint das Ergebnis nicht ganz zu stimmen.
  
 
===Das Vorzeichenbit===
 
===Das Vorzeichenbit===
  
 
Nunja. Allein aus Gründen der Übersichtlichkeit war unser erster Versuch nicht besonders schön.
 
Nunja. Allein aus Gründen der Übersichtlichkeit war unser erster Versuch nicht besonders schön.
−
Eine gute Idee wäre es doch 1 Bit zu reservieren was das Vorzeichen angibt.
+
Eine gute Idee wäre es doch 1 Bit zu reservieren, welches das Vorzeichen angibt.
  
 
Also codieren wir unsere ganzen Zahlen nun folgendermaßen:
 
Also codieren wir unsere ganzen Zahlen nun folgendermaßen:
Zeile 193: Zeile 195:
  
 
<pre>
 
<pre>
−
  1100 (-5)
+
  1100 (-4)
 
+0011 (+3)
 
+0011 (+3)
 
---------
 
---------
Zeile 199: Zeile 201:
 
</pre>
 
</pre>
  
−
Nun, da hätte -2 rauskommen sollen. Also scheinbar auch nicht geeignet für arithmetische Operationen. Andererseits schaut euch mal diese beiden Zahlen an:
+
Nun, da hätte -1 rauskommen sollen. Also anscheinend auch nicht geeignet für arithmetische Operationen. Andererseits schaut euch mal diese beiden Zahlen an:
  
 
  <font color=red>0</font><font color=blue>000</font> = <font color=red>-</font><font color=blue>0</font>
 
  <font color=red>0</font><font color=blue>000</font> = <font color=red>-</font><font color=blue>0</font>
 
  <font color=red>1</font><font color=blue>000</font> = <font color=red>+</font><font color=blue>0</font>
 
  <font color=red>1</font><font color=blue>000</font> = <font color=red>+</font><font color=blue>0</font>
  
−
Seltsam oder? Selbst wenn die Addition erfolgreich gewesen <b>wäre</b>, dann wäre diese Phänomen immernoch sehr fragwürdig.
+
Seltsam, oder? Selbst wenn die Addition erfolgreich gewesen <b>wäre</b>, dann wäre diese Phänomen immer noch sehr fragwürdig.
  
 
===2k-Zahlen===
 
===2k-Zahlen===
  
−
Ich hoffe ihr habt noch nicht die Hoffnung aufgegeben eine geeignete Codierung für ganze Zahlen zu finden *g* - Ich kann euch beruhigen: Dieser Ansatz wird zum Erfolg führen!
+
Ich hoffe, ihr habt noch nicht die Hoffnung aufgegeben eine geeignete Codierung für ganze Zahlen zu finden – ich kann euch beruhigen: Dieser Ansatz wird zum Erfolg führen!
  
−
Was heißt "2k-Zahl" überhaupt?  
+
Was heißt „2k-Zahl“ überhaupt?  
−
2k-Zahl ist eine abkürzende schreibweise für "Zweierkomplement-Zahl".  
+
2k-Zahl ist eine abkürzende Schreibweise für „Zweierkomplement-Zahl“.  
  
−
Alle Zahlen von 0 bis 2<sup>n-1</sup> werden wieder genau so codiert wie wir es von den natürlichen Zahlen gewohnt sind. Um nun zu einer Zahl das negative Gegenstück zu finden, muss man folgendermaßen vorgehen:
+
Alle Zahlen von 0 bis 2<sup>n-1</sup> werden wieder genau so codiert, wie wir es von den natürlichen Zahlen gewohnt sind. Um nun zu einer Zahl das negative Gegenstück zu finden, muss man folgendermaßen vorgehen:
  
 
<ul>
 
<ul>
Zeile 224: Zeile 226:
 
====Beispiel====
 
====Beispiel====
  
−
Angenommen wir haben die 4-Bit 2k-Zahl 5<sub>(10)</sub> = 0101<sub>(2)</sub>
+
Angenommen wir haben die 4-Bit-2k-Zahl 5<sub>(10)</sub> = 0101<sub>(2)</sub>
 
Wir wollen diese nun negieren:
 
Wir wollen diese nun negieren:
  
Zeile 243: Zeile 245:
  
 
==Fließkommazahlen==
 
==Fließkommazahlen==
 +
''TODO''
  
 
==Strings==
 
==Strings==
−
Strings, zu Deutsch "Zeichenkette", sind Hintereinanderreihungen von ASCII-Zeichen.
+
Strings, zu Deutsch „Zeichenketten“, sind Aneinanderreihungen von ASCII-Zeichen.
  
 
===C-Strings===
 
===C-Strings===
Zeile 252: Zeile 255:
 
Wenn man in C eine Stringkonstante definiert, wird das abschließende Nullzeichen automtisch angehängt. Dennoch sollte immer darauf geachtet werden, dass nicht in unerlaubte Speicherbereiche geschrieben wird, falls ein Programm dieses Nullzeichen weglässt.
 
Wenn man in C eine Stringkonstante definiert, wird das abschließende Nullzeichen automtisch angehängt. Dennoch sollte immer darauf geachtet werden, dass nicht in unerlaubte Speicherbereiche geschrieben wird, falls ein Programm dieses Nullzeichen weglässt.
  
−
"LowLevel" in C:
+
„LowLevel“ in C:
 
   Index:  0-1-2-3-4-5-6-7-8
 
   Index:  0-1-2-3-4-5-6-7-8
 
   Inhalt:  L o w L e v e l 0
 
   Inhalt:  L o w L e v e l 0
  
 
===Pascal-Strings===
 
===Pascal-Strings===
−
In der Pascal-Variante ist ein String ebenfalls ein Char-Array. Allerdings wird die Länge des Strings im 0ten Element gespeichert, der eigentliche Text beginnt erst beim ersten Element.
+
In der Pascal-Variante ist ein String ebenfalls ein Char-Array. Allerdings wird die Länge des Strings im ersten Element gespeichert, der eigentliche Text beginnt erst beim ersten Element.
  
−
"LowLevel" in Pascal:
+
„LowLevel“ in Pascal:
 
   Index:  0-1-2-3-4-5-6-7-8
 
   Index:  0-1-2-3-4-5-6-7-8
 
   Inhalt:  8 L o w L e v e l
 
   Inhalt:  8 L o w L e v e l