© Prof. Dr. Knut Barghorn, Jade Hochschule. Studienort WHV. E-mail: knut.barghorn@jade-hs.de

1. Zahlensysteme und Arithmetik

1.1 Lernziele, Literaturtipps und URLs

Ziel dieser Einheit

Wir werden in diesem Kapitel lernen, dass es nicht nur das bekannte Dezimalsystem gibt, mit dem Sie seit der ersten Schulklasse rechnen. Wir werden uns historisch an das Thema annähern und andere Systeme ansehen. Wir werden das Dualsystem und das Hexadezimalsystem kennen lernen. Wir werden lernen, Werte der verschiedenen Zahlensysteme ineinander zu überführen. Danach werden wir lernen, wie mit dem Dualsystem gerechnet werden kann. Wir werden die Grundrechenarten (Addition, Subtraktion, Multiplikation und Division) auf das Dualsystem anwenden lernen. Nebenbei werden wir verstehen, warum das Dualsystem und auch das Hexadezimalsystem gerade für die Informatik so wichtig sind. Anschließen werden wir uns noch kurz mit Codes beschäftigen, um zu verstehen, dass es in der Ablage von Speicherinformation notwendig ist, die Information richtig zuzuordnen.

Literaturtipps

1.2 Historie der Zahlensysteme

Zahlensysteme gibt es bereits seit einiger Zeit. Die ersten Systeme zur Zählung lassen sich auf 30.000 vor Chr. datieren. Es wurden  Mammutknochen gefunden, in die Zählkerben eingeritzt waren. (Quelle: Ifrah, Georges: Universalgeschichte der Zahlen)

Um 15.000 vor Chr. gibt es die ersten Tontafeln mit Zahlzeichen für Hammel und Ziegen (ebenfalls aus Ifrah)

Nun machen wir einen kleinen geschichtlichen Sprung auf der Zeittafel.

Die Römer begannen ab dem fünften Jahrhundert v. Chr. die Darstellung von Zahlen durch Zahlzeichen, die dem westgriechischen Alphabet entliehen waren. Der genaue Ursprung dieser Form des Additionssystems konnte allerdings bis heute nicht vollständig geklärt werden. Sicher ist jedoch, dass römische Zahlenzeichen eine Abwandlung erheblich älterer Zeichen sind und alternativ zu Kerbzeichen zuerst zum Zählen von Menschen, Vieh, Geld und Hausrat verwendet wurden; also um damit festzustellen, welche Menge mehr Bestandteile hat.

Die römischen Zahlen sind sicherlich bekannt.

Darstellung Römisch

Darstellung Deutschland heute

I

1

V

5

X

10

L

50

C

100

D

500

M

1000

Die Darstellung von Werten zwischen den Hauptwerten wurden additiv durch die Darstellung von mehreren Zeichen erreicht.

Darstellung Römisch

Darstellung Deutschland heute

III

1+1+1=3

VII

5+1+1=7

XIIII

10+1+1+1+1=14

CLXI

100+50+10+1=161

MMVI

1000+1000+5+1=2006

In der dritten Zeile entdecken Sie die Darstellung von 14. Zunächst war es bei den Römern üblich die Zeichen rein additiv zu nutzen. Erst ab die Mittelalter ging man dazu über, die vorangestellten kleineren Werte von den folgenden größeren Werten zu subtrahieren. 

Beispiel:

Darstellung Römisch (Mittelalter)

Darstellung Deutschland heute

IV

5-1=4

XLIV

50-10+5-1 = 44

Die Ableitung dieses Zahlensystems kann man sich aus der Verwendung des Fingersystems vorstellen. Die I stellen einen Finger dar. Die V eine ganze Hand voll Finger (5) und das X zwei volle Hände.

Das System war nicht mit einen Schlag voll erfunden, sondern hat sich vermutlich entwickelt. Wie Isidor von Sevilla um 620 n. Chr. in seiner zwanzigbändigen Enzyklopädie des gesamten Wissens jener Zeit » Originum seu etymologiarum libri XX « berichtet, soll der Dichter Quintus Ennius (geboren 239 v. Chr. in Rudiae, Kalabrien, gestorben 169 v. Chr.) die beiden Darstellungen M für Mille (Tausend) und C für Centum (Hundert) erfunden haben.

Das Rechnen mit den Fingern war sicherlich einfach ableitbar und begründet die Darstellung von 5 und 10 als besondere Zeichen, aber es wurden auch noch andere Systeme gefunden. Beobachten Sie einmal Schulanfänger. Sie werden feststellen, dass diese noch mit den Fingern rechnen, obwohl es Ihnen nicht beigebracht wurde. Kinder finden sehr schnell heraus, dass eine Hand fünf Finger hat und sich dieser Sachverhalt nicht ändert, also nicht immer wieder nachgezählt werden muss.

Die Ägypter verwendeten ein sehr ähnliches Zahlensystem. Hier finden sich die Zeichen ebenfalls in 10er Potenzen dargestellt.

Sie nutzten Sie die Zeichen ebenfalls additiv in der Darstellung:

Quelle der beiden Bilder: http://home.fonline.de/fo0126/geschichte/ges1.htm

Das Zahlensystem der Maya (um 250 n. Chr.) operiert mit nur 3 Symbolen: einer stilisierten Muschel für Null oder Vollendung, einen Punkt für 1 und einen Strich für 5. Die Basis war 20 (und nicht 10 wie bei uns). Sie ordneten die Zahlen vertikal an, mit den niedrigsten Werten unten und den höchsten an der Spitze.

Quelle: http://www.indianer-wiki.org/Maya-Ziffern

Die Basis des Zahlensystems der Maya ist nicht 10 (wie bei den Römern oder Ägyptern), sondern 20. Die Ableitung erfolgte wahrscheinlich unter zu Hilfenahme der Zehen an den Füßen.

Wenn die Mayas Zahlen größer der 20 darstellen wollten, taten Sie dieses indem Sie Blöcke von 20er untereinander schrieben.

Die unterste Ebene stellt die Zahl 7 dar. Die Ebene darüber die 12*20=240, die nächst höhere die 9*20*20=3600. Insgesamt wird also die Zahl 7+240+3600=3847 dargestellt.

Das Besondere des Maya-Zahlensystems war aber die Verwendung der Null, die man bei der Darstellung der derzeit aktuellen Jahreszahl ebenfalls benötigt. Die Null wa bei den Römern gänzlich unbekannt.

All diesen Zahlensystemen ist eines gemeinsam. Die Darstellung macht ein Rechnen außerordentlich schwierig. Stellen Sie sich vor, Sie sollen die Zahlen MCLX und XCVII miteinander multiplizieren. Versuchen Sie es, aber nehmen Sie bitte nicht das bekannte heutige Zahlensystem zu Hilfe.

Unser heutiges Zahlensystem kam erst im 12. Jahrhundert über die Araber nach Europa. Es stammt ursprünglich aus Indien. In diesem hindu-arabischen Zahlensystem gab es die Null schon seit tausend Jahren.

Aufgabe zur Mitarbeit: : Stellen Sie die aktuelle Jahreszahl im Maya-Zahlensystem dar.

1.3 Das Dezimalsystem

Das heute verwendete Zahlensystem ist ein Stellenwertsystem oder auch Positionssystem. Das Besondere daran ist, dass der Zahlenwert von der Position der Ziffer innerhalb einer Zahl abhängig ist.

Vorsicht: Die Bedeutung der Worte "Zahl" und "Ziffer" unterscheidet sich deutlich. Eine Ziffer ist ein diskreter Einzelwert (im Dezimalsystem z.B. 2 oder 3 oder 8...), die Zahl ist eine Zusammenstellung von Ziffern, in deren Ergebnis je nach Bildungsgesetz ein konkreter Wert repräsentiert wird (z.B. 367).

Beispiel: Die Zahl 3735

Die erste Ziffer entspricht dem Wert 3000

Stellengewicht 1000

=10³

Die zweite Ziffer entspricht dem Wert 700

Stellengewicht 100

=10²

Die dritte Ziffer entspricht dem Wert 30

Stellengewicht 10

=10¹

Die vierte Ziffer entspricht dem Wert 5

Stellengewicht 1

=100

Den Wert einer dargestellten Zahl erhält man also, wenn man die

Werte aller Ziffern mit ihren Stellengewichten multipliziert und die Produkte addiert.

Beispiel: 3*10³+7*10²+3*101+5*100 = 3*1000+7*100+3*10+5*1 = 3000+700+30+5 = 3735

Wenn wir diese Vorschrift formalisieren und in eine mathematische Form bringen, schreiben wir folgendes:

So lässt sich jede Zahl bezüglich einer Basis b eindeutig durch die Ziffern a darstellen.

Unser heutiges System (das Dezimalsystem) hat die Basis 10 (wie wir gerade gesehen haben). Auch das System der Maya war ein Stellenwertsystem Die Mayas verwendeten die Basis 20. Das Zahlensystem der Mayas nennt man deshalb auch Vigesimalsystem.

Eigenschaften von Stellenwertsystemen sind:

Aufgabe : Nennen Sie ein Zahlensystem, das kein Stellenwertsystem ist. Zahlensysteme, die kein Stellenwertsystem darstellen nennt man übrigens Ziffernwertsysteme!

Weitere Stellenwertsysteme mit verschiedenen Basen sind:

b=2 : Dualsystem (Ziffern: 0,1)

b=8: Oktalsystem (Ziffern: 0,1,2,3,4,5,6,7)

b=16: Hexadezimalsystem (Ziffern: 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F)

 

1.4 Das Dualsystem

Wie wir gerade gesehen haben, ist das Dualsystem ein Stellenwertsystem zur Basis b=2. Zur Darstellung werden die Werte 0 und 1 verwendet.

Gerade in technischen Bereichen wird dieses System häufig verwendet. Bei Schaltungen lassen sich die Werte 0 und 1 leicht darstellen in Form von „ist nicht da“ oder „ist da“. So lässt sich beispielsweise ein Strom anlegen oder auch nicht, ein Lichtimpuls feststellen oder auch nicht, oder ein Kratzer auf einer ansonsten glatten Oberfläche ausmachen. 

Gerade für die Informatik ist damit dieses System sehr wichtig, da die Zahlen in Computern im Dualsystem dargestellt werden. Die Stelle einer Dualzahl nennt man Bit. Acht Bit (Bit steht für Binary digit, engl. kleiner Happen) sind ein Byte.

Dabei kommt die Zahl 8 nicht von ungefähr, denn jedes druckbare Zeichen kann man mit 8 bit darstellen.

8 bit in Binärschreibweise können einen dezimalen Maximalwert von
11111111 = 255 (= 256 Einzelwerte, da die 0 mitgerechnet wird) annehmen.

Die ersten 8-bit-PC hatten eine interne Verarbeitungsbreite von eben diesen 8 bit, d.h., dass der Prozessor maximal Zahlen von 255 direkt verarbeiten kann, größere Zahlen musste er erst mühselig aus "Einzelteilen" zusammensetzen, seine Berechnungen durchführen und anschließend wieder zerteilen, um sie auf dem 8 bit breiten Datenbus an den jeweiligen Empfänger zu schicken. Man kann leicht beurteilen, welchen Geschwindigkeitszuwachs heutige 32-bit-Rechner bringen.

Werden 8 bit zu einer Einheit zusammengefasst, erhält man 1 Byte - dies ist die kleinste adressierbare Informationseinheit in der EDV.

1101 0011 0110 1100 diese Zahl besteht also aus 2 Byte

Die größte darstellbare Zahl mit einem Byte ist also 255. Benötigt man auch negative Zahlen, kann man im einfachsten Fall das erste bit als Vorzeichen (0 bedeutet positiv, 1 negativ) verwenden und man kann mit den verbleibenden 7 bit noch Zahlen realisieren von -127 bis +127 (die 0 gibt es 2-mal, positiv und negativ).

Werden bit und Byte als Abkürzungen verwendet, z.B. in Kilobit oder Kilobyte, ist es allgemein üblich, zur besseren Unterscheidung für bit ein kleines b und für Byte ein großes B zu verwenden (5 kB = 5 KiloByte).

Ein Beispiel für die Umwandlung eines Werte im Dualsystems in das Dezimalsystem werden wir nun durchrechnen:

Gegeben sei der Wert 101010

Stelle

Stellengewicht

Dezimalzahlentsprechung des Stellengewichtes

Berechnung

1

20

1

0*1=0

2

21

2

1*2=2

3

22

4

0*4=0

4

23

8

1*8=8

5

24

16

0*16=0

6

25

32

1*32=32

Der Wert 101010 zur Basis 2 entspricht also dem Wert 0+2+0+8+0+32=42 im Dezimalsystem.

 

1.5 Das Hexadezimalsystem

Für Zahlenangaben ist die Darstellung in Binärschreibweise sehr umständlich und unübersichtlich. Schon eine 5-stellige Dezimalzahl würde binär 16 Stellen benötigen! Aus diesem Grunde hat man sich für reine Darstellungszwecke für ein Zahlensystem mit größerem Ziffernumfang entschieden.

Es fällt uns zwar etwas schwer, aus unserem dezimalen Denken auszubrechen und hexadezimal zu denken, da wir Probleme haben, die Ziffern oberhalb von 9 darzustellen. Eine 10 zu schreiben ist nicht erlaubt, sie erinnern sich bitte an den Unterschied zwischen Ziffern und Zahlen. 10 als Zahl im Hexadezimalen bedeutet 16 im Dezimalsystem. Man verwendet deshalb Buchstaben und fängt bei A für die dezimale 10 an. Die größte im hexadezimalen System darstellbare Ziffer entspricht der dezimalen Zahl 15. Wenn wir das Alphabet weitergehen, landen wir bei F für 15.

Ziffernvorrat hexadezimal:

0 1 2 3 ....7 8 9 A B C D E F

Groß- oder Kleinschreibung der Buchstaben spielt keine Rolle, jedoch hat sich als guter Stil die Großschreibung eingebürgert. Das allgemeine Bildungsgesetz hat auch hier seine Gültigkeit.

Beispiel: Ein Beispiel für dieses System ist die Darstellung eines Wertes F2A3

Die Berechnung der zugehörigen Darstellung im Dezimalsystems erfolgt wieder nach der obigen Regel:

Stelle

Stellenwert

Dezimalzahlentsprechung des Stellenwertes

Wertentsprechung im Dezimalsystem

Berechnung

1

160

1

3

3*1=3

2

161

16

10

10*16=160

3

162

256

2

2*256=512

4

163

4096

15

 15*4096=61440

Damit ist der Wert F2A3 zur Basis 16 äquivalent zum Wert 61440+512+160+3=62115 zur Basis 10.

Nun mögen Sie fragen, warum gerade die Hexadezimalzahlen für die Darstellung großer Zahlen in der EDV übersichtlicher sind als die Dualzahlen

Eine Ziffer hex kann maximal den dezimalen Wert 15 annehmen. Bezogen auf das Binärsystem entspricht das 4 bit (1111 bin = 15 dez), also genau einem Halbbyte.

Man kann also ein Byte binär mit genau 2 Ziffern hexadezimal darstellen. Diese Darstellungsweise lässt sich visuell sehr schnell erfassen und man braucht auch keine komplizierten Umrechnungsprogramme.

Beispiel:

Sieht man z.B. die Hexzahl "FF", kann man auf den ersten Blick erkennen, dass es sich hier um genau 1 Byte handelt, in dem alle bit auf 1 gesetzt sind und dies der größten darstellbaren Dezimalzahl mit einem Byte entspricht, also 255.

Nun liefere ich Ihnen eine Tabelle, die Sie sich sehr genau einprägen sollten. Die Darstellung der Dualzahlen als Hexadezimalziffern.

Hexadezimalziffer

Dualzahl

1

0001

2

0010

3

0011

4

0100

5

0101

6

0110

7

0111

8

1000

9

1001

A

1010

B

1011

C

1100

D

1101

E

1110

F

1111

Beachte: es gibt keine Hexadezimalrechner. Alle Rechner rechnen ausschließlich im Dualsystem. Das Hexadezimalsystem dient lediglich zur übersichtlicheren Darstellung der Werte. Die Darstellung im Hexadezimalsystem ist bei Rechnern üblich, aber es gibt auch Rechner früherer Zeit, die die Darstellung im Oktalsystem (Basis 8) vornahmen.

1.6 Umwandlungen

Umwandlungen von Dualzahlen in Hexadezimalzahlen

Die beiden Zahlensysteme sind eng miteinander verwandt. Da sich mit vier Bit der Wertebereich einer Hexadezimalziffer abgedeckt werden kann, können diese einfach transformiert werden. (24 = 16).

Verständlicher wird es an einem Beispiel:

Wir wollen die Dualzahl 110011101 in eine Hexadezimalzahl umwandeln.

Dazu teilen wir die Dualzahl in 4Bit-Blöcke (sogenannte Tetraden) auf:

1 1001 1101

Nun steht vorne eine einzelne Dualziffer. Wir füllen den Rest mit Nullen auf:

0001 1001 1101

Jedem dieser 4Bit-Blöcke ordnen wir nun sehr einfach die entsprechende hexadezimale Ziffer zu:  1  9  D.

Im Hexadezimalsystem steht für die dezimale 13 ein D.

Der Wert der Dualzahl 110011101  im Hexadezimalsystem lautet also 19D.

Aufgabe : Bitte berechnen Sie zu Hause, ob diese Darstellung auch stimmt. Dazu wandeln Sie beide Zahlen in das Dezimalsystem und vergleichen die Werte.

Umwandlung von Dezimalzahlen in Dualzahlen und Hexadezimalzahlen

Wir haben immerhin schon geschafft, Dualzahlen in Dezimalzahlen zu wandeln. Das war aber vergleichsweise einfach. Der nun folgende Part ist etwas komplizierter. Als Motivation kann ich Ihnen aber mit auf den Weg geben, dass Sie das Umrechnungsverfahren auch bei Dezimalzahlen in Hexadezimalzahlen verwenden können.

Wenn Sie die dezimale Zahl 3467 als Dualzahl darstellen wollen, können Sie natürlich die Potenzen von 2 hochzählen und die Restwerte entsprechend zerlegen. Im Dualsystem traue ich Ihnen das sogar im Kopf zu. Bei großen Dezimalzahlen, die wir als Zahlen zu einer Basis von 16 (also Hexadezimalsystem) darstellen wollen, wird das entsprechend schwieriger.

Es gibt ein mathematisches Verfahren (Restwertverfahren), das wir auf dieses Problem anwenden können.

Eine Dezimalzahl D soll in eine Zahl des y-Systems gewandelt werden:

Es sind mehrere Schritte erforderlich, bis sich ein errechneter Rest nicht mehr durch y teilen lässt
(d.h. Null ist).

D mod y = a1

(D/y) mod y = a2

((D/y)/y) mod y = a3

usw. bis der Ausdruck Null ergibt. Danach werden die Ergebnisse in umgekehrter Folge aneinandergereiht:

D=a3a2a1

 

Ich sehe Unverständnis in Ihren Gesichtern, was daran liegt, dass ich noch nicht erklärt habe, was mod bedeutet.

mod steht für den Rest der ganzzahligen Division, d.h. als a1, a2 usw. steht nicht das Divisionsergebnis sondern lediglich der Rest, der bei der Division entsteht.

Man kann das aber auch einfacher darstellen, indem wir die Vorschrift schrittweise aufschreiben:

·        Teile die Dezimalzahl D ganzzahlig durch y und schreibe den Restwert auf

·        Teile den Quotienten des vorherigen Schrittes ganzzahlig durch y und schreibe den Restwert auf

·        Fahre damit solange fort, bis der Quotient Null ergibt.

·        Schreibe die Restwerte in umgekehrt erhaltener Reihenfolge hintereinander.

Noch klarer wird es an einem Beispiel:

Gegeben sei die Dezimalzahl 42 (die kennen wir schon als Dualzahl). Wir wollen diese in das Dualsystem überführen (y=2)

D=42, y=2

42 / 2 = 21            Rest 0 (a1)

21 /2   = 10           Rest 1 (a2)

10 / 2  = 5             Rest 0 (a3)

5 / 2 = 2                Rest 1 (a4)

2 / 2 = 1                Rest 0 (a5)

1 / 2 = 0                Rest 1 (a6)

Die Dualzahl lautet also D=a6,a5,a4,a3,a2,a1 ->101010.

Wie ich schon erwähnte funktioniert das Verfahren auch mit beliebigen anderen Stellenwertsystemen.

Wie nehmen ein weiteres Beispiel zur Kontrolle:

Die dezimale Zahl 365 soll als Hexadezimalzahl ausgegeben werden:

365 / 16 = 22       Rest  13

22 / 16 = 1            Rest  6

1 / 16 = 0              Rest 1

 Die gesuchte Hexadezimalzahl lautet also 16D (für die 13 müssen wir natürlich die Ziffer D schreiben)

Aufgabe zur Mitarbeit: Wandeln Sie die Dezimalzahl 2635 in eine Hexadezimalzahl um.
Wandeln Sie die Dezimalzahl 102 in eine Dualzahl um.

Besonderheiten / Merkwürdigkeiten

Sie haben sich sicherlich auch schon darüber gewundert, dass Ihr Rechner zu Hause beim Testen des Hauptspeichers weiter zählt als Sie erwarten. Sie haben sich den neuen Rechner aus dem Supermarkt besorgt und wissen laut der Werbung, dass er über (beispielsweise, weil es sich einfach rechnen läßt) 32MB Hauptspeicher verfügt.

Die Nutzung von Vorsätzen wie Kilo, Mega, Giga ist in der Datenverarbeitung etwas eigenartig. Es ist nämlich ein KB (KByte, Kilobyte) nicht wie erwartet gleich 1000 Byte. Schuld daran ist das binäre Zahlensystem.

Im Dezimalsystem entspricht die Vorsilbe ein Kilo dem Wert 103 . Im Dualsystem können wir die 10 als Basis aber nicht verwenden. Da hier die Basis 2 verwendet wird, suchte man nach einem Wert, der etwa der 10³ im Dezimalsystem entspricht. Am besten trifft das Ergebnis 210

Näher kommt man nicht an die 1000 im Dezimalsystem heran, so dass man tatsächlich ansetzt:

1 KB = 210 Byte = 1024 Byte

Gleiches gilt natürlich auch beim Megabyte. Indem man das Kilo wieder mit 1024 zu multipliziert:

1 MB = 1 KB * 1 KB = (210 * 210) Byte = 220 Byte = 1.048.576 Byte

analog für das Gigabyte:

1 GB = 1 KB * 1 MB = (210 * 220) Byte = 230 Byte = 1.073.741.824 Byte

Zu beachten sind noch die Schreibweisen der Abkürzungen:

So sollte es eigentlich verwendet werden. Aber schon bei der Darstellung vom MegaByte hat sich nur MB eingebürgert, so dass Sie keine Unterscheidung mehr treffen können, ob sich auf 1000 oder 1024 als Faktor bezogen wird. Auch an die Schreibweise der Vorsilbe Kilo halten sich die wenigsten und deshalb stellen Sie bei der Werbungsangabe Ihres neuen Rechners fest, dass er nicht exakt bis 32.000.000 bit überprüft, sondern 33.554.432 bit.

1.7 Arithmetik im Dualsystem

Wir können nun schon eine ganze Menge in den Zahlensystemen machen. Aber wir sind noch nicht in der Lage in den Zahlensystemen die einfachsten Rechnungen (Grundrechenarten) durchzuführen. Auch dieses ist letztlich gar nicht schwer, wenn man es einmal verstanden hat. Da Sie nun auch die Begriffe Bit und Byte kennen, rechnen wir nun auch mit diesen. Das bedeutet, jede Dualzahl wird nun in 8 Bit-Schreibweise dargestellt. Dies können Sie erreichen, wenn Sie eine Dualzahl nach links mit Nullen auffüllen, bis die Dualzahl insgesamt acht Stellen hat. Warum wir das hier so machen, werden Sie sehen, wenn wir zu der Darstellung von negativen Zahlen kommen.

Addition

Für die Addition zweier einstelligen Zahlen im Dualsystem benötigen Sie, wie bei addieren im Dezimalsystem, manchmal einen Übertrag.

Wenn Sie im Dezimalen die einstelligen Zahlen 6 und 7 addieren wollen, schreiben Sie unter den Strich eine 3 und über den Strich eine kleine 1 (den Übertrag). Sie wissen so, dass Sie in der nächsten Stelle einen Übertrag berücksichtigen müssen.

Bei der Addition im Dualsystem verfahren Sie genauso, Sie müssen nur wissen, was die Addition der einstelligen Zahlen für Werte und Überträge ergeben.

Für die Addition zweier einstelliger Dualzahlen Y = a + b gilt

a

b

Y

Übertrag

0

0

0

0

0

1

1

0

1

0

1

0

1

1

0

1

Der Übertrag bedeutet auch hier, dass das Ergebnis nicht mehr einstellig darstellbar ist.

Ein Beispiel dazu:

Addiere die beiden Dualzahlen 01010111 und 00011010

0

1

0

1

0

1

1

1

Zahl 1

0

0

0

1

1

0

1

0

Zahl 2

0

0

1

1

1

1

0

0

Übertrag

0

1

1

1

0

0

0

1

Ergebnis

Das Ergebnis lautet 01110001

Aufgabe zum Mitdenken: Rechnen Sie die beiden zu addierenden Dualzahlen in Dezimalzahlen um, addieren Sie diese und vergleichen das Ergebnis mit dem Ergebnis der Dualzahladdition, indem Sie das Ergebnis der Dezimalzahlrechnung in eine Dualzahl überführen.

Die Addition ist also recht einfach. Da wir uns nun aber ganz bewusst einem Rechnerspeicher von 8 Bit angepasst haben, klappt die Addition nur innerhalb eines bestimmten Wertebereiches. Normalerweise verwendet man zur Addition von ganzen Zahlen einen deutlich größeren Wertebereich, aber um einen überschaubaren Rahmen zu haben, begrenzen wir uns absichtlich auf ein Byte. Unsere größte darstellbare Zahl ist die 11111111, also dezimal 255. Was passiert nun, wenn wir eine 00000001, also 1, addieren? Es kommt tatsächlich Null (00000000) heraus.
Da 1+1=0 Übertrag 1 gibt, bekommt man als Ergebnis in Wirklichkeit nicht 00000000 sondern 00000000 Übertrag 1. Dieser letzte Übertrag kann jedoch nicht mehr in einem Byte gespeichert werden und wird deshalb ersatzlos gestrichen.
Wenn ich also immer weiter eine 1 addiere, lande ich irgendwann bei 255, danach wieder bei 0 und dann irgendwann wieder bei 255. Im 1 Byte Wertebereich zählen wir also bei der laufenden Addition von 1 immer wieder von 0-255.

Subtraktion

Die Subtraktion zweier Dualzahlen ist leider etwas komplizierter. Um eine Subtraktion durchführen zu können, benötigen wir noch zwei Begriffserklärungen:

Einerkomplement

Das Einerkomplement ist die Negation der einzelnen Ziffern der Dualzahl:

Das Einerkomplement von 11111111 ist also 00000000. Das Einerkomplement von 10110011 ist 01001100.

Zweierkomplement

Das Zweierkomplement entspricht dem Einerkomplement plus einer dualen Eins. Wir nehmen also das Einerkomplement und addieren 00000001.

Das Zweierkomplement von 10011010 ist also 01100110 (01100101 + 00000001)

Das Zweierkomplement von 00011100 wird im Einerkomplement zu 11100011, im Zweierkomplement zu 11100100

Mit dem Wissen um diese Komplemente können wir nun auch subtrahieren. Dieses wird Ihnen gleich etwas komisch vorkommen und Sie werden mich fragen, warum das so geht. Das ist aber eine komplizierte Frage auf die es auch eine komplizierte Antwort gibt. Damit wollen wir uns aber nicht beschäftigen. Es ist hier wichtig, dass Sie die Regeln anwenden können. Die Frage nach dem „Warum“ beantworte ich später einmal.

Die Regel lautet: Die Subtraktion zweier Dualzahlen erfolgt durch die Addition des Zweierkomplements.

Beispiel, für die die es nicht glauben wollen:

Wenn wir von der Dualzahl 00001010 die Dualzahl 00000101 abziehen wollen, verfahren wir folgendermaßen:

Aus 00000101 wir das Einerkomplement 11111010 und das Zweierkomplement 11111011.

Addieren wir nun nach der bekannten Regel der Addition

  00001010

+11111011

----------------

  00000101

Den letzen Übertrag konnten wir nicht mehr speichern und er entfällt damit. Wir stellen also fest dass 10-5=5 ist.

Hausaufgabe: Subtrahieren Sie verschiedene Dualzahlen voneinander. Dieses Verfahren gehört zum Grundlagenverständnis.

Wir können uns das Subtrahieren auch etwas einfacher machen und die folgenden Regeln berücksichtigen:

Für die Subtraktion zweier einstelliger Dualzahlen Y = a - b gilt:

a

-

b

=

Y

Übertrag

0

-

0

=

0

0

0

-

1

=

1

1 in n. Pos.

1

-

0

=

1

0

1

-

1

=

0

0

Probieren wir dies an einem Beispiel aus:

Subtrahiere die Dualzahl 0010010 von der Dualzahl 1110101 

1

1

1

0

1

0

1

Zahl 1 (a)

0

0

1

0

0

1

0

Zahl 2 (b)

0

0

0

0

1

0

 

Übertrag

1

1

0

0

0

1

1

Ergebnis (Y)

Das Ergebnis lautet also 1100011

Diese Regel können wir gleich bei der Division noch einmal gebrauchen.

Multiplikation

Nun werden wir multiplizieren lernen. Das schriftliche Multiplizieren von Dualzahlen funktioniert genauso wie das schriftliche Multiplizieren von Dezimalzahlen.

Dazu ein kleines Beispiel:

Wir multiplizieren die beiden Dualzahlen 00001101 und 00000101

Wie Sie sehen, ist das Multiplizieren besonders einfach, da die Teilergebnisse entweder Null sind oder den Multiplikator darstellen. Sie müssen dann nur noch die Teilergebnisse stellenrichtig aufaddieren und haben sehr schnell das Ergebnis.

Übrigens: Die Multiplikation zweier n-stelliger Dualzahlen hat die Stellenzahl 2n-1. Dieses zu wissen, macht durchaus Sinn, weil wenn wir im Rechner multiplizieren, müssen wir wieder auf den Überlauf achten.

Für die Multiplikation im Rechner gibt es eine schöne Berechnungsvorschrift. Im Rechner wird die Multiplikation durch einfache Bitverschiebung und Addition gelöst. Jeder Rechner verfügt über eine Bitverschiebungsfunktion. Man spricht auch von einem Shift

Berechnungsvorschrift zur Multiplikation zweier Dualzahlen x und y:

1.      Setze Ergebnisspeicher auf 0

2.      wenn die letzte Stelle von y = 1 ist, addiere x zum Ergebnisspeicher

3.      Verschiebe y um eine Stelle nach rechts (die in Schritt 1. behandelte Stelle wird "hinausgeschoben", sie verschwindet also).

4.      Verschiebe x um eine Stelle nach links (entspricht Multiplikation mit 2 -> wegen der stellenrichtigen Addition)

5.      Wenn y nicht 0 ist, gehe zu Schritt 2.

Die 5. Anweisung hat zur Folge, dass die Multiplikation beendet wird, sobald nichts mehr zu addieren ist. Bei einer Wortbreite von n, ist die Multiplikation auf jeden Fall nach n Schritten beendet.

Aufgabe zum Mitdenken: Multiplizieren Sie die Dualzahlen 00000110 und 000101 anhand des obigen Algorithmus

Division

Die Division ist ebenfalls recht einfach zu bewerkstelligen. Hier kommen wir wieder mit der Grundschulmathematik und dem bisherigen Wissen bequem aus.

Wir dividieren die Dualzahl 101110 durch die Dualzahl 101.

Bei der Multiplikation wird ein Links-Shift durchgeführt, dementsprechend ist es logisch, dass bei der Division ein Rechts-Shift durchgeführt wird. Teile ich die Zahl 8 durch 2 ergibt das 4, in Dualschreibweise 00001000 / 00000010 = 00000100. Die Division durch 2 entspricht also einem Rechts-Shift von einer Stelle. Die Division von 8 durch 4 ergibt 2, in Dualschreibweise 00001000 / 00000100 = 00000010, also ein Rechts-Shift von zwei Stellen. Was passiert nun aber mit Nachkommastellen?

Schauen wir uns die einfache Division von 3 durch 2 an. 00000011 / 00000010 = 00000001. Der Rechts-Shift bewirkt, dass die letzte 1 rechts aus dem Zahlenbereich "herausfällt". Das bedeutet, dass alle Nachkommastellen abgeschnitten werden. Wichtig: Es wird nicht gerundet, es wird abgeschnitten. Das Ergebnis aus 3 durch 2 ist also 1!!! Diese Art der Division funktioniert jedoch nur, wenn man durch 2 oder eine Potenz von 2 dividiert.

Sie können die vier Grundrechenarten auf das Dualsystem anwenden.

Negative Dualzahlen

Nun werden Sie sagen, das ist ja alles schön und gut, aber wie stelle ich eine negative Zahl dar? Gut werde ich sagen, kümmern wir uns jetzt auch mal darum. Wir haben bislang gesehen, dass es Dualzahlen gibt. Im Rechner werden Dualzahlen in Speicherbereichen mit festen Größen abgelegt. Wie groß dieser Speicherbereich ist, spielt dabei eigentlich keine Rolle, aber wir nehmen erst einmal an, er betrüge 8Bit = 1 Byte. Wir haben den darstellbaren Wertevorrat von 0-255 (also insgesamt 256 Zeichen).

Ein Ansatz wäre vielleicht, die negativen Zahlen einfach wie im Dezimalsystem mit einem Vorzeichen (flag) zu versehen.

Bei einer Dualzahl wäre dann zum Beispiel : 00000001 die 1 und 10000001 die -1.

Der Ansatz ist verlockend aber mathematisch nicht durchzuhalten. Wie wir wissen, führt die Addition von 00000001 zur nächst höheren Zahl. Probieren wir das einmal mit der -1 also 10000001 aus.

  10000001 + 00000001 = 10000010

In dezimaler Schreibweise steht hier nun  -1 + 1 = -2, was offensichtlich falsch ist.

Wir haben oben die Einerkomplemente und Zweierkomplemente eingeführt. Interessanterweise helfen die uns deutlich bei der Lösung:

Wenn wir das Einerkomplement als Darstellung der negativen Zahl nutzen, passiert Folgendes:

Nehmen wir die Zahl 00000101 (5), transformieren sie in das Komplement 11111010 und addieren 00000001. Es kommt die Zahl 11111011 heraus. Wenn dieses die -4 darstellt, muss das Einerkomplement  dazu ( 00000100 )  4 darstellen.

Scheint geklappt zu haben. Aber was passiert nun, wenn wir das Komplement von 00000000 also 11111111 bilden.

Unser Wertebereich hat zwei Nullen. Eine positive und eine negative Null. Das wäre je erst mal nicht problematisch, aber:

Addiere zu 1111111 eine 00000001 hinzu: (Bedenke, wir haben einen begrenzten Speicher und wenn der Überlauf droht, sollen wir wieder von vorne zu zählen beginnen.

Dummerweise ergibt 11111111 + 00000001 = 00000000 (die Übertragseins ist ja zu vernachlässigen)

Da auch diese Aussage falsch ist, müssen wir noch etwas nachbessern.

Der Ausweg stellt das Zweierkomplement dar. Wenn die negative Zahl durch das Zweierkomplement dargestellt wird, gehen alle Rechnungen wirklich auf.

Nehmen wir noch mal das Beispiel von gerade: Das Zweierkomplement von 00000000 ist 00000000. Addieren wir eine 00000001 hinzu, kommt wirklich 00000001 heraus. Die Rechnung geht auf.

Ein anderes Beispiel, damit Sie mir glauben:

Wir wollen im Dualsystem -5 + 2 rechnen. Es sollte -3 herauskommen.

00000101 stellt die 5 dar.

11111011 stellt das Zweierkomplement also die -5 dar.

11111011 + 00000010 ergibt 11111101

Die Rückrechnung aus dem Zweierkomplement ins Einerkomplement ergibt 11111101 – 00000001 = 11111100

Das Einerkomplement von 11111100 ist 00000011 also wirklich die 3.

Also stellt 11111101 tatsächlich die -3 dar.

Das Gute ist, dass immer noch am ersten Bit zu erkennen ist, ob eine Zahl positiv oder negativ ist.

Wenn wir folgende Zahlen nehmen, erkennen wir, dass sich der Wertebereich nun verschoben hat:

00000000 = 0
01111111 = 127
10000000 = -128

Wir nutzen nicht mehr den Bereich 0-255 sondern einen Bereich von -128 bis 127.

Festkommazahlen

Bislang haben wir uns immer nur um die ganzen Zahlen 20 , 21 , 22 , … gekümmert. Nun wollen wir aber wissen, was passiert, wenn wir die Nachkommastellen ebenfalls darstellen.

Wir erweitern dazu einfach das System auf Brüche 2-1  2-2 , 2-3 , … rechts vom Dezimalkomma.

Beispiel: 1011,1101 stellt die Zahl 8+0+2+1+0,5+0,25+0+0,0625= 11,8125 dar.

Die Rechenoperationen (Addition, Subtraktion, Multiplikation, Division) funktionieren wie bei ganzen Zahlen.

Gleitkommazahlen

Das könnte es nun gewesen sein, denken Sie. Aber wir haben im Rechner noch ein Problem:

Die Zahlen die wir bislang behandelt haben, haben alle ein Ende. Was aber machen wir mit Zahlen, die kein Ende nehmen wollen.

Wenn Sie 10 durch 3 teilen bekommen Sie 3,3333…..

Im alltäglichen Leben geben wir uns damit zufrieden, wenn wir sagen von einem Lottogewinn von 10 Euro bekommt jeder 3,33 Euro. Den übrig gebliebenen Cent vernachlässigen wir meist.

Bei einem Rechner, der alles ziemlich genau nimmt, gibt es aber ein Problem, denn wenn wir nun mit 3,33 weiterrechnen, ergibt 3,33 * 3 = 9,99 und nicht 10. Das kann bei Berechnungen schnell zu einem Problem werden, da sich solche Rundungsfehler möglicherweise aufsummieren und im Endergebnis zu einem nicht zu vernachlässigenden Fehler führen.

Den Ausweg aus diesem Problem stellen die Gleitkommazahlen dar.

Allgemein kann man jede reelle Zahl x darstellen als

x = m * Be

m steht für die Mantisse

B für die Basis

e für den Exponenten

Beispiel:   x = 12,353 = 1,2353 * 101 = 0,12353 * 102

Wie man an dem Beispiel auch sieht, ist die Darstellung in dieser Form unterschiedlich möglich. Es gibt aber eine Norm, die besagt, dass vor dem Komma keine Null stehen soll. Diese Form nennt man deshalb auch Normalisierte Gleitkommazahl. Die normalisierte Form der Darstellung im obigen Beispiel ist also 1,2353 * 101.

Da wir hier im Dualsystem rechnen, haben wir bei der Darstellung der Zahlen also die Basis 2. Es müssen also nur die Mantisse und der Exponenten im Dualsystem dargestellt werden.

Darstellung im IEEE-Format

Das IEEE (sprich Ei triple I, Institute of Electrical and Electronics Engineers) hat für die Darstellung von Gleitkommazahlen Standards herausgegeben: IEEE-Standard 754-1985. Es gibt eine kurze (float) und eine lange Version (double)

Dieser besagt, dass in 32Bit (float) die Gleitkommazahl wie folgt abgelegt wird:

Das Vorzeichen benötigt ein Bit, der Exponent 8 Bits und die Mantisse 23 Bits.

X

XXXXXXXX

XXXXXXXXXXXXXXXXXXXXXXX

Vorzeichen

Exponent e

Mantisse m

Die im 32 Bit Modus größte darstellbare Zahl liegt knapp unter:

21281038

Die kleinste darstellbare positive Zahl lautet

2- 149 10- 45 

In der langen Darstellung in 64 Bit (double) benötigt das Vorzeichen 1 Bit, der Exponent 11 Bits und die Mantisse 52 Bits.

X

XXXXXXXXXXX

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Vorzeichen

Exponent e

Mantisse m

Damit erhält man natürlich andere darstellbare Größen:

Damit liegt die größte darstellbare positive Zahl knapp unter 10308

Die kleinste darstellbare positive Zahl lautet

2- 52 • 2- 1022 = 2- 1074 10- 324

Gleitkommazahlarithmetik:

Gleitkommazahlen können addiert / subtrahiert werden, wenn Sie gleiche Exponenten besitzen. Die Exponenten können durch das Ändern der Mantisse angepasst werden. Die Addition / Subtraktion erfolgt wie bei ganzen Zahlen auch Addieren / Subtrahieren der Mantissen.

Gleitkommazahlen können multipliziert werden, indem die Exponenten addiert und die Mantissen multipliziert werden.

Die Division erfolgt durch die Division der Mantissen und der Subtraktion der Exponenten.

1.8 Darstellung von Zeichen

Nun haben wir gesehen, wie Zahlen innerhalb eines Dualsystems behandelt werden. Unklar ist aber noch, wie der Rechner aus den Dualzahlen Zeichen darstellt. Diese können dann zum Beispiel als Buchstaben innerhalb eines Schreibprogramms oder eines Browsers ausgegeben werden.

Das Schlüsselwort an dieser Stelle lautet: Kodierung.

Definition Code (oder Kode): Unter einem Code versteht man eine Vorschrift, wie Symbole einer Darstellung in Symbole einer anderen Darstellung übertragen werden.

Beispiel: Der Morsecode stellt eine Vorschrift dar, wie Zeichen des Alphabets in ein durch lange und kurze Tonsignale gewandelt werden können.

Bereits im Kapitel 1.4 haben wir die Begriffe Bit und Byte kennen gelernt. Um besser damit umgehen zu können, werden diese Begriffe noch etwas besser erläutert.

Mit n Bits lassen sich 2 hoch n verschiedene Zustände darstellen, so kann sich beispielsweise eine Einheit aus zwei Bits in vier verschiedenen Zuständen befinden: 00, 01, 10 und 11. Weiterhin können mit vier Bits 16 verschiedene Zustände gespeichert werden, mit acht Bits 256, und so weiter. Jedes zusätzliche Bit verdoppelt die Anzahl der möglichen darstellbaren Zustände.

Den Begriff Byte haben wir nicht ganz korrekt eingeführt, es soll für unsere Zwecke aber reichen. Korrekt müsste ein heißen, dass ein Byte die Menge von Bits enthält, die notwendig ist, um einen Zeichensatz vollständig darzustellen.

Dies können durchaus weniger als acht Bits sein: Bei Teletex reichen 5 Bits, um den Zeichensatz darzustellen (1 Byte). Der Ascii-Zeichensatz lässt sich in 7 Bits vollständig darstellen.

Der ASCII-Zeichensatz:

ASCII Steht für American Standard Code for Information Interchange.

Im Jahr 1968 wurde der bis heute gültige ASCII-Code festgelegt. Dieser Code enthält aber keinerlei Sonderzeichen wie Umlaute oder ß oder auch andere Zeichen aus anderen europäischen Sprachen. Damit diese Sprachen dargestellt werden konnten, wurde der Code von sieben auf acht Bit erweitert. Allerdings ist auch der 8 Bit-Code nicht in der Lage alle Sonderzeichen zu berücksichtigen. Deshalb gibt es mehrere Erweiterungen. Keine dieser Acht-Bit-Erweiterungen sollte aber als ASCII bezeichnet werden, um Verwirrung zu vermeiden – ASCII bezeichnet nur den einheitlichen Sieben-Bit-Code.

Wenn wir uns die Codierung ansehen, werden wir feststellen, dass die ersten 32 Zeichen (hex. 00 ­ 20) Steuerzeichen darstellen.

HEX

ASCII

HEX

ASCII

HEX

ASCII

HEX

ASCII

00

NUL

20

SP

40

@

60

`

01

SOH

21

!

41

A

61

a

02

STX

22

"

42

B

62

b

03

ETX

23

#

43

C

63

c

04

EOT

24

$

44

D

64

d

05

ENQ

25

%

45

E

65

e

06

ACK

26

&

46

F

66

f

07

BEL

27

'

47

G

67

g

08

BS

28

(

48

H

68

h

09

HT

29

)

49

I

69

i

0A

LF

2A

*

4A

J

6A

j

0B

VT

2B

+

4B

K

6B

k

0C

FF

2C

,

4C

L

6C

l

0D

CR

2D

-

4D

M

6D

m

0E

SO

2E

.

4E

N

6E

n

0F

SI

2F

/

4F

O

6F

o

10

DLE

30

0

50

P

70

p

11

DC1

31

1

51

Q

71

q

12

DC2

32

2

52

R

72

r

13

DC3

33

3

53

S

73

s

14

DC4

34

4

54

T

74

t

15

NAK

35

5

55

U

75

u

16

SYN

36

6

56

V

76

v

17

ETB

37

7

57

W

77

w

18

CAN

38

8

58

X

78

x

19

EM

39

9

59

Y

79

y

1A

SUB

3A

:

5A

Z

7A

z

1B

ESC

3B

;

5B

[

7B

{

1C

FS

3C

<

5C

\

7C

|

1D

GS

3D

=

5D

]

7D

}

1E

RS

3E

>

5E

^

7E

~

1F

US

3F

?

5F

_

7F

DEL

Diese Steuerzeichen sind keine druckbaren Zeichen, sondern weisen den Rechner an etwas besonderes in der Darstellung zu erbringen:

HEX

ASCII

Bedeutung

02

STX

Textanfang (start of text)

03

ETX

Textende (end of text)

07

BEL

Klingel (bell)

09

HT

Tabulator (horizontal tabulator)

0A

LF

Zeilenvorschub (line feed)

0C

FF

Seitenvorschub (form feed)

0D

CR

Wagenrücklauf (carriage return)

Da in der Regel immer acht Bits verwendet werden, haben wir bei der reinen ASCII-Darstellung noch ein weiteres Bit frei. Dieses achte Bit wird für eine so genannte Paritätsprüfung genutzt.

Bei der Übertragung von Informationen ist es natürlich wichtig zu wissen, ob die Information korrekt angekommen ist. Diese Kontrolle kann über das Parity-Bit vorgenommen werden:

Es wird in diesem Bit gespeichert, ob der gespeicherte ASCII-Code eine gerade oder ungerade Anzahl von Einsen enthält. Liegt eine gerade Parität vor, wird eine „0“ gesetzt, bei einer ungeraden Anzahl von Einsen eine „1“, um wieder eine gerade Parität zu bekommen.

Man kann sich auch darauf einigen, dass eine ungerade Parität vorliegen soll, dann wird eben genau andersherum verfahren.

Bei einer Datenübertragung wird vom Sender die Parität bestimmt und mit den Daten dem Empfänger übermittelt. Dieser berechnet seinerseits die Parität und vergleicht sie mit dem empfangenen Wert.
Übertragungsfehler in einem Bit (1-Bit-Fehler) können auf diese Weise festgestellt werden.

Wenn man ein ASCII-Zeichen verwenden möchte und man leider in England am PC sitzt und den Buchstaben ß nicht findet, kann man direkt auf die ASCII-Tabelle zugreifen, indem man die <Alt>-Taste drückt und die dem Zeichen entsprechenden Nummer des ASCII-Zeichens eingibt. (Für das ß ist es <Alt>225) Auch die Steuerzeichen funktionieren: Probieren Sie es mit der 09 oder 11 gern einmal aus.

Unicode

Um die Unzulänglichkeiten des ASCII-Codes aufzuheben und den verschiedenen Sprachen gerecht zu werden, wurde der Unicode entwickelt. Er verwendet einen Vorrat von 32 Bit pro Zeichen und kann damit mehr als 4 Milliarden verschiedene Zeichen darstellen. Diese sind nicht alle notwendig. Man kommt derzeit mit rund einer Million erlaubter Code-Werte aus.

Das Besondere am Unicode Zeichenraum ist, dass Zeichen erst nach besonderer Prüfung aufgenommen werden. Sollte sich dann später herausstellen, dass das Zeichen nicht korrekt ist, wird lediglich von der Verwendung abgeraten. Es wird nie ein Zeichen aus dem Unicode entfernt.

Seit Mai 2019 ist Unicode Version 12.1.0 aktuell. Im Vergleich zur Vorgängerversion enthält sie ein Zeichen mehr.

Im Unicode Zeichensatz sind auch zu ASCII kompatible Zeichensätze enthalten. UTF-8 ist eine 8-Bit-Kodierung von Unicode, die mit ASCII abwärtskompatibel ist. Unicode-Zeichen mit den Werten aus dem Bereich von 0 bis 127 (0 bis 7F hexadezimal) werden in der UTF-8-Kodierung mit dem gleichen Wert wiedergegeben. Insofern sind alle Daten, die ausschließlich echte ASCII-Zeichen verwenden, in beiden Darstellungen identisch. UTF-8 hat sind in den vergangenen Monaten zu einem echten Standard entwickelt. Etliche Linux-Distributionen nutzen den UTF-8 Code. Auch Internet-Seiten sind bereits recht häufig UTF-8 kodiert.

Will man ein Unicode-Zeichen in HTML oder XML verwenden, muss man es aus der Tabelle heraussuchen.

Die Tabelle findet man unter: http://www.unicode.org/charts/

Dort findet man das Zeichen und seine hexadezimale Zeichennummer. Mit dieser Zeichennummer erstellt man dann eine Zeichenentität durch Voranstellen von „&#x“ und Anfügen eines Semikolons, z.B. „&#x2295;“. Die Zeichennummer kann in der Zeichenentität auch dezimal, dann ohne führendes „x“, angegeben werden, zum Beispiel „&#8853;“ für das gleiche Zeichen. Die Text Encoding Initiative TEI hat Empfehlungen erarbeitet, Unicode in XML-Dateien in leichter verständlicher Form einzugeben. Hier handelt es sich um einen Satz benannter Zeichen (engl.: named entites), der in das Stylesheet integriert wird. Allgemein übliche benannte Zeichen sind z. B. die Umlaute wie „&Auml;“ statt „&#196;" für Ä.

Übrigens werden auch Emoji in den Unicode aufgenommen. Sie können ja mal recherchieren, welches Emoji sich hinter dem HEX-Code U+1F91D verbirgt.

 

Adressierung von Codes

Nun muss man aber noch wissen, wie sich überhaupt unterscheiden lässt, ob es sich gerade um einen Buchstaben oder ein Zeichen oder einen Ton oder einen Bildpunkt handelt.

In der Informatik haben sich die Begriffe Byte (für acht Bits) und Wort (4 Byte = 32 Bits) eingebürgert. Es gibt auch noch die Begriffe Halbwort (2 Byte = 16 Bits) und Doppelwort (8 Byte = 64 Byte).

Die heutigen Rechner sind in der Lage 32 Bits oder auch 64 Bits gleichzeitig zu adressieren. Das ist gleichbedeutend mit der Vorstellung, dass der Rechner 32 oder 64 Bits zusammenhängend verstehen kann. Die Intel Pentium Modellreihe konnte nur 32 Bits gleichzeitig verarbeiten (16 Bit – Architektur), der Intel Itanium 2 Prozessor hat eine 64 Bit-Architektur. Im RISC Workstation-Bereich ist die Umstellung auf die 64 Bit Architektur bereits vollzogen.

Wenn ein Wort aus den Bytes mit den Adressen n, n+1, n+2, n+3 besteht, dann ist n die Adresse des Worts.

In einem Speichermodul sind die Werte von n, die durch 4 teilbar sind, die natürlichen Grenzen für Worte. An solchen Stellen beginnende Worte sind an den Wortgrenzen (word boundary) ausgerichtet (aligned)

In (heutigen) Computern kann also alles immer nur in der Form von Bitmustern gespeichert werden. Eine Abbildung von gewöhnlichem Klartext  in ein Bitmuster (bit pattern) nennt man einen Binärcode (binary code)

Je nach dem Typ der Daten (Zahlen, Schriftzeichen, Befehle) benutzt man einen anderen Binärcode. Bei Kenntnis des Typs kann man ein Bitmuster dekodieren und seinen Sinn erschließen. Verwechselt man den Typ, bekommt das Bitmuster eine ganz andere Bedeutung.

Wir haben uns aber als Menschen angewöhnt, alles mit einem Namen zu belegen. Maschinen erledigen das gern mit numerischen Adressen.

Wir beschäftigen uns nun mit den Variablen. Jede Programmiersprache das Konzept einer Variable (variable) als abstraktes Analogon zu einer Speicherstelle.

Eine Variable hat einen symbolischen Namen, hinter dem eine Adresse verborgen ist und der Wert (value) der Variable ist der Wert des dort gespeicherten Bitmusters. Um diesen erschließen zu können, hat die Variable einen Typ (type), der bei ihrer Vereinbarung angegeben werden muss. Die bekannten Muster aus den Programmiersprachen seien hier kurz genannt:

char (Schriftzeichen, character): Die hinterlegten Codes sind ASCII oder Unicode

int (endlich große ganze Zahlen, integer): Die hinterlegten Codes sind Dualzahlen

float (endlich große Gleitkommazahlen, floating point numbers): Die hinterlegten Codes sind Gleitkommazahlen im IEEE 754 Standard.