Computerhardware: Binärzahlen

Aus Wikibooks

Was ist das eigentlich – ein Zahlensystem?[Bearbeiten]

Ein Zahlensystem dient dazu, Zahlen – vor allem große Zahlen – einfach und übersichtlich darzustellen. Außerdem soll es möglichst einfach sein, mit den Zahlen zu rechnen.

Mit dem Wachstum der ersten Städte und Zivilisationen entstand die Notwendigkeit, mit großen Zahlen umzugehen. Auf einem Bierdeckel mit ein paar Strichen die Anzahl der bestellten Biere zu notieren, ist übersichtlich. Mit 300 Strichen zu notieren, dass ein Einwohner mit 300 Krügen Wein seine Steuern bezahlt hat, ist sehr unübersichtlich. Deshalb wurden die ersten Zahlensysteme erfunden: Das sumerische, das ägyptische und später das römische Zahlsystem. Die Grundidee: Für größere Mengen von Einsen werden Gruppensymbole eingeführt. Die Römer verwendeten den Buchstabe „I“ für die Eins. Zehn Striche wurden durch ein „X“ ersetzt, „C“ steht für hundert und „M“ für tausend. Zusätzlich gibt es Halbzahlen: „V“ für fünf, „L“ für 50 und „D“ für 500. So konnte man die 300 Striche durch „CCC“ ersetzen. „MCCXIII“ bedeutet also 1213. Die Zahl 132 kann man als CXXXII, IIXXXC, XCXIIX oder XXXIIC schreiben. Die Reihenfolge der Ziffern spielt eigentlich keine Rolle, nur die Summe zählt. Daher werden derartige Zahlensysteme als „Additionssysteme“ bezeichnet.

Eine beliebige Reihenfolge der Ziffern führt allerdings dazu, dass es für eine Zahl viele verschiedene Schreibweisen gibt. Das ist unübersichtlich. Deshalb hatten die Römer eine Regel, die größeren Ziffern vor den kleineren zu schreiben.

Für die römischen Zahlen gibt es eine weitere, etwas merkwürdige Sonderregelung, um das Schreiben von vier gleichen aufeinander folgenden Zeichen zu vermeiden: Steht vor einer größeren Ziffer eine kleinere, wird die kleine von der großen abgezogen. Die Zahlen werden dadurch kürzer. So schreibt man für die Zahl 49 beispielsweise „XLIX“ ((50 minus 10) plus (10 minus 1)) statt „XXXXVIIII“.

Zahl richtig falsch
4 IV IIII
9 IX VIIII
19 XIX XVIIII
1959 MCMLIX MDCCCCLVIIII

Die Addition und Subtraktion römischer Zahlen ist nicht leicht, gemessen an unserem heutigen Kenntnissen und Gewohnheiten. Sie zu multiplizieren, zu dividieren oder gar zu potenzieren ist ein Albtraum. Das dürfte ein wesentlicher Grund sein, warum von den Römern keine Entdeckungen auf den Gebieten Mathematik, Physik und Astronomie bekannt sind.

Die Inder haben das Dezimalsystem erfunden und die Araber haben es im 13. Jahrhundert nach Europa gebracht. Durch die Rechenbücher von Adam Ries wurde es in Deutschland bekannt. Dieses System vereinfachte das Rechnen sehr.

Stelle 2 1 0
Stellenwert 102 101 100
Beispiel 3 3 3
= 3*102 3*101 3*100
= 3*100 3*10 3*1


Durch welche Besonderheiten ist das Dezimalsystem den römischen Zahlen überlegen?

  • Das Dezimalsystem ist ein Stellenwertsystem mit zehn Ziffern. Alle Zahlen, klein oder beliebig groß, können mit zehn Ziffern (den Ziffern von 0 bis 9) gebildet werden. Zehn Ziffern = Dezimal.
  • Das Dezimalsystem ist ein „Stellenwertsystem“: Der „Wert“ einer Ziffer hängt davon ab, an welcher Stelle einer Zahl sie steht. Wenn eine Ziffer von der letzten Stelle in die vorletzte Stelle einer Zahl vorrückt (wenn man z. B. rechts eine Null anfügt), ist sie zehn mal mehr „wert“. In der Zahl „333“ kommt die Ziffer 3 dreimal vor, wobei sie drei verschiedene ­Bedeutungen hat: Dreihundert, dreißig und drei.
  • Für das Rechnen mit großen Zahlen gibt es „relativ einfache“ Regeln. Ob ich mit zweistelligen oder 20stelligen Zahlen rechne, die Regeln sind dieselben.
Stelle 2 1 0
Stellenwert 22 21 20
Beispiel 1 1 0
= 1*22 1*21 0*20
= 1*4 1*2 0*1

Wir verwenden das Zehnersystem, weil wir Dinge an zehn Fingern abzählen. Hätten die Menschen einen weniger beweglichen Daumen, würden wir möglicherweise das Achter-System (Oktalsystem) für das natürlichste Zahlensystem der Welt halten. Wenn wir leicht bewegliche Zehen hätten und barfuß laufen würden, wäre vielleicht das Zwanziger-Zahlensystem optimal. Die Maya und die Azteken hatten es, und einige isolierte Naturvölker benutzen es heute noch.

Für Computer wird ebenfalls ein Stellenwertsystem benutzt, in dem es nur zwei Ziffern gibt, die Null und die Eins. Die Zwei und alle größeren Zahlen muss der PC aus Nullen und Einsen zusammenstellen. Dieses „binäre Zahlensystem“, auch „Dualsystem“ genannt, wurde im 17. Jahrhundert vom deutschen Philosoph, Mathematiker und Physiker Gottfried Wilhelm Leibniz erfunden. Der Name kommt aus dem lateinischen: bina = paarweise, duo = zwei. So hat z. B. die binäre Zahl "110" im dezimalen System den Wert 6.

Wie rechnet man im Binärsystem? Ganz einfach: Ob es sich um die Regeln für Addition, Multiplikation, Division und andere handelt, alle uns bekannten Rechenregeln sind für alle Stellenwert-Zahlensysteme identisch! Nur der Übertrag bei der Addition erfolgt nicht wie gewohnt nach der Neun, sondern nach der Eins.

Dezimal Dual Hex.
0 0 0
1 1 1
2 10 2
3 11 3
4 100 4
5 101 5
6 110 6
7 111 7
8 1000 8
9 1001 9
10 1010 A
11 1011 B
12 1100 C
13 1101 D
14 1110 E
15 1111 F
16 1 0000 10
17 1 0001 11
18 1 0010 12
19 1 0011 13
20 1 0100 14
21 1 0101 15
22 1 0110 16
23 1 0111 17
24 1 1000 18
25 1 1001 19
26 1 1010 1A
27 1 1011 1B
28 1 1100 1C
29 1 1101 1D
30 1 1110 1E
31 1 1111 1F
32 10 0000 20
33 10 0001 21
34 10 0010 22
35 10 0011 23
36 10 0100 24
37 10 0101 25
38 10 0110 26

Warum benutzen Computer nicht das Dezimalsystem?[Bearbeiten]

Es gibt zwei Möglichkeiten, Ziffern elektrisch darzustellen. Die eine kennen Sie von alten Telefonen mit Wählscheibe. Wenn man die Neun wählt, werden neun Strom-Impulse zur Vermittlungsstelle geschickt, die einen Drehwähler um neun Schritte drehen.

Die andere Möglichkeit ist, Ziffern durch unterschiedlich hohe Spannungen darzustellen. Würde man unser gebräuchliches Dezimalsystem für Computer verwenden wollen, müsste man jede der zehn Ziffern durch einen anderen Spannungswert darstellen, z. B. Ziffer 0 durch 0 Volt, Ziffer 1 durch 0,3 V, Ziffer 2 durch 0,6 V, Ziffer 3 durch 0,9 V usw. bis zur Ziffer 9 mit 2,7 V. Diese Spannungen müssten sehr genau eingehalten werden, um sie unterscheiden zu können. Nehmen wir als Beispiel die Ziffer 2 mit 0,6 Volt. Schon eine geringe Abweichung von 5% = 0,15 Volt (5 % von 3 Volt, dem Maximalwert) würde den Pegel auf 0,75 Volt anheben. Dieser Wert wäre von der "Zwei" genau so weit wie von der "Drei" entfernt. Die Elektronik könnte nicht mehr zwischen benachbarten Ziffern unterscheiden.

Ist diese Genauigkeit von deutlich weniger als 5% überhaupt möglich?

Das erste Hindernis ist die extreme Temperaturempfindlichkeit aller Halbleiter. Sie erwärmen sich, wenn Strom hindurchfließt. Zehn Grad Temperaturerhöhung kann die Zahl der freien Ladungsträger verdoppeln. Damit steigt die Stromstärke und der Halbleiter wird immer wärmer, wenn der Strom nicht begrenzt wird, z. B. mit einem Widerstand.

Das zweite Problem ist die Nichtlinearität aller Halbleiterelemente. Wenn man die Eingangsspannung von Null beginnend allmählich erhöht, würde bei einem Bauelement mit linearer Kennlinie der Strom proportional zunehmen. Doch bei einem Transistor fließt noch kein Strom, bis die Eingangsspannung etwa 0,5 Volt erreicht hat. Ob die Spannung 0 Volt oder 0,3 oder 0,5 Volt beträgt, der Ausgangsstrom bleibt auf Null!

Im Bereich von 1,5 bis 3 Volt hängt der Ausgangsstrom fast linear von der Eingangsspannung ab. Steigt die Eingangsspannung weiter, gerät der Transistor in die „Sättigung“: Egal wie weit man die Eingangsspannung erhöht, der Ausgangsstrom steigt nicht mehr.

Mit so einem Bauelement kann man also zehn Ziffern nicht genau genug unterscheiden.

Das dritte Problem sind die großen Toleranzen bei der Herstellung. Winzigste Schwankungen in der Materialqualität und den Fertigungsbedingungen führen zu großen Abweichungen vom Durchschnitt. Betrachten wir als Beispiel ein einfaches Halbleiterelement: Den Transistor. Hochintegrierte Schaltungen enthalten Millionen Transistoren, da müsste es doch möglich sein, einen einzelnen Transistor „nach Maß“ zu fertigen? Weit gefehlt. Der Transistor BC 546 beispielsweise wird seit Jahrzehnten von zahlreichen Firmen als Massenprodukt gefertigt.

Transistor-Stromverstärkungsklassen
Gruppe A Gruppe B Gruppe C
110 ... 220 220 ... 450 420 ... 800

Allerdings schafft es noch immer keiner der Hersteller, Transistoren genau mit den gewünschten Eigenschaften herzustellen. Angenommen, ein Hersteller bekommt eine Bestellung über 10 000 Transistoren mit einer Stromverstärkung zwischen 220 und 450. Er wird etwa 20 000 Stück produzieren und sie in der Gütekontrolle in die Gruppe A, B und C einsortieren. Beachten Sie die gewaltige Streuung des Stromverstärkungsfaktors von 110 bis 800! Der Kunde wird mit den Transistoren aus Gruppe B beliefert. Und der Rest? Der geht ins Lager. Bei entsprechender Preisgestaltung wird sich das meiste verkaufen lassen.

Stellen Sie sich eine Autofabrik vor, wo Autos unterschiedlicher Qualität vom selben Fließband rollen: PKW mit einem Verbrauch von 30 Liter/100 km und 50 km/h Höchstgeschwindigkeit, und eine Stunde später mit 8 Liter/100 km und 300 km/h Höchstgeschwindigkeit. In der Gütekontrolle würden die Autos sortiert und in mehrere Klassen eingeteilt, die dann zu verschiedenen Preisen verkauft werden. Autos mit einem Verbrauch über 20 Litern oder einer Höchstgeschwindigkeit unter 60 km/h werden verschrottet. Nun, vielleicht habe ich ein wenig übertrieben, jedenfalls würden sich die Autobauer unter Ihnen schon bei viel kleineren Qualitätsunterschieden in Grund und Boden schämen. Doch so verfährt die Halbleiterindustrie mit ihren Erzeugnissen.

Wenn es schon bei einem simplen Transistor nicht gelingt, ihn „nach Maß“ herzustellen – wieviel schwerer ist es dann, einen Prozessor mit hunderten Millionen Transistoren mit genau den gewünschten Eigenschaften zu produzieren? Es gelingt nicht. Der Ausschuss steigt exponentiell mit der Größe des Chips. Bei der Einführung einer neuen Produktgeneration kann anfangs deutlich mehr als die Hälfte der Produktion unbrauchbar sein. Auch die brauchbaren CPUs unterscheiden sich. Wenn sie die gleiche Berechnung durchführen, werden sie unterschiedlich heiß. Wenn der Prozessor bei der geplanten Frequenz zu heiß wird, bekommt er eine niedrigere Taktfrequenz aufgedruckt, denn die Wärmeentwicklung ist etwa proportional zur Taktfrequenz. Stromsparende Exemplare, die besonders „cool“ bleiben, werden etwas teurer verkauft und vielleicht in Premium-Notebooks verbaut.

Um auf die Frage zurückzukommen, ob eine Genauigkeit von deutlich weniger als 5% überhaupt möglich ist: Ja, unter den zehntausenden Transistoren könnte man einige wenige finden, die genau genug wären. Allerdings wäre die Ausbeute extrem niedrig und demzufolge der Preis hoch. Bezahlbare Computer könnte man so nicht bauen.

Wenn allerdings ein Transistor nicht zehn, sondern nur zwei Zustände unterscheiden braucht, vereinfacht das die Konstruktion eines Computers enorm. Die zwei Zustände „gesperrt“ und „geöffnet“ beherrscht jeder Transistor.

Ist es aber möglich, statt mit zehn Ziffern mit zwei Ziffern auszukommen?

Das Dualsystem[Bearbeiten]

Das Dualsystem ist ein Zahlensystem, das mit zwei Ziffern auskommt: Null und Eins. Das macht es fehlerresistent. Da die Elektronik nur zwei Zustände zu unterscheiden braucht, sind auch nichtlineare Elemente mit schwankenden Parametern geeignet.

Bei einer Betriebsspannung von 3 Volt gilt meist eine Eingangsspannung zwischen 0 V und 0,8 V als Ziffer 0, und eine Eingangsspannung über 2,0 V gilt als Ziffer 1. Eingangsspannungen zwischen 0,8 V und 2,0 V sind undefiniert und dürfen nicht auftreten.

In jedem Schaltkreis werden die Signale regeneriert: Die Ausgänge eines Schaltkreises liefern 0,4 V bei der Ziffer 0. Selbst wenn diese Spannung etwas größer oder kleiner als 0,4 V ist, wird sie trotzdem von der nachfolgenden Schaltung einwandfrei als Null erkannt, solange sie 0,8 Volt nicht überschreitet. Die 2,4 V Ausgangsspannung der Ziffer 1 darf von 2,0 bis 3,0 Volt schwanken. Durch diese großzügigen Toleranzen bei den zulässigen Eingangsspannungen wird eine hohe Zuverlässigkeit erreicht. Die genauen Spannungen variieren je nach Herstellungstechnologie (TTL, CMOS, Schottky oder andere) und sind Datenblättern zu entnehmen.

Fazit: Nur auf der Basis des binären Zahlensystems kann man bezahlbare Computer bauen, und deshalb müssen wir uns hier mit dem Binärsystem herumschlagen. Erst durch die Reduzierung aller Schaltelemente auf nur noch zwei Spannungsstufen konnten die Toleranzanforderungen an die elektronischen Bauelemente so sehr verringert werden, dass die preiswerte Massenfertigung von Schaltkreisen möglich wurde. Weil wir preiswerte Computer wollen, müssen wir die Unannehmlichkeit in Kauf nehmen, dass die Computer nur Nullen und Einsen kennen und jede, absolut jede Information (Zahlen, Texte, Bilder, Musik, Videos, ...) in eine Folge von Nullen und Einsen umgewandelt werden muss.

Binärzahlen sind allerdings sehr lang und unübersichtlich. Die vierstellige Dezimalzahl 1234 wird im Binärsystem zur 11-stelligen 100 1101 0010. Die Anzahl der Binärstellen wird als „Bit“ (engl.: binary digit; dt.: Binärziffer) bezeichnet, 100  1101 0010 ist also eine 11-Bit-Binärzahl. Ein anderes Beispiel: Die Zahl 1 000 000 wird zu 1111 0100 0010 0100 0000, einer 20-Bit-Zahl. Jeweils 8 Bit werden zu einem Byte zusammengefasst.

Programmierer haben oft mit 32-Bit-Zahlen (4 Byte) zu tun. Ein Beispiel: 0000 0000 0000 0000 1111 1111 1111 0000 ist die Adresse, mit der das BIOS-Programm beginnt. Können Sie sich so eine Zahl merken oder sie wenigstens fehlerfrei abschreiben? Das ist schwierig. Deshalb benutzen Programmierer aushilfsweise das Hexadezimalsystem.

Das Hexadezimalsystem[Bearbeiten]

Das lateinische Wort „Hexadezimal“ bedeutet „Sechzehn“. Es handelt sich also um ein Zahlensystem mit 16 Ziffern. Mit den Ziffern 0 bis 9 hat man aber nur 10 Ziffern zur Verfügung. Um nicht sechs weitere Ziffernsymbole neu erfinden zu müssen (und weltweit neue Computertastaturen mit sechs zusätzlichen Tasten einführen zu müssen), verwendet man die Zeichen A, B, C, D, E und F als Ziffern. Zählen wir einmal im Hexadezimalsystem, beginnend mit der Ziffer Null:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 1A, 1B, 1C, 1D, 1E, 1F, 20, 21, 22 usw. Nach der 79 kommt 7A, 7B, 7C, 7D, 7E, 7F, 80. Nach AE kommt AF und B0, nach FE kommt FF, 100 und 101. Alles klar?

Wie wandelt man Binärzahlen in Hexadezimalzahlen um und umgekehrt? Nehmen wir das Beispiel mit der Darstellung einer Million.

Binär 1111 0100 0010 0100 0000
Hexadezimal F 4 2 4 0

Die Umrechnung von Binärzahlen in Hexadezimalzahlen ist ganz leicht. Man unterteilt die Binärzahl von Rechts beginnend in Vierergruppen und ersetzt jede Vierergruppe durch eine Hexadezimalziffer. So hat eine Hexadezimalzahl viermal weniger Stellen als die gleiche Binärzahl. Das ist der Vorteil des Hexadezimalsystems: Große Zahlen werden kompakt dargestellt und man kann sie sich besser merken.

Hier finden Sie weitere Details zu oktalen, hexadezimalen und anderen Zahlensystemen.
ASCII-Tabelle (Auszug)
Zeichen dezimal binär
0 48 110000
1 49 110001
2 50 110010
...
9 57 111001
: 58 111010
; 59 111011
< 60 111100
= 61 111101
> 62 111110
? 63 111111
@ 64 1000000
A 65 1000001
B 66 1000010
C 67 1000011
D 68 1000100
...
a 97 1100001
b 98 1100010
c 99 1100011

Wie kann der PC Buchstaben und Zahlen darstellen?[Bearbeiten]

Um Texte zu schreiben, benutzen wir ein Alphabet aus einigen Dutzend Buchstaben sowie zahlreiche Sonderzeichen. Für Zahlen haben wir zehn Ziffern zur Verfügung. Das „Alphabet“ des Computers besteht aber nur aus zwei Zeichen: Eins und Null. Wie kann man damit auskommen?

Die Methode ist einfach und wurde schon vor langer Zeit erfunden. Denken Sie bitte mal an das Morsealphabet: Es gibt kurze und lange Zeichen („Punkt“ und „Strich“) sowie Pausen zwischen den Zeichen. In der Morsecode-Tabelle ist jedem Buchstaben eine Kombination von Punkten und Strichen zugeordnet. Eine ähnliche Codetabelle gibt es auch für die Darstellung von Buchstaben im Computer.

ASCII und das Byte[Bearbeiten]

Eine der gebräuchlichsten Code-Tabellen für Computer ist ASCII, was für „American Standard Code for Information Interchange“ steht. In dieser Tabelle sind alle wichtigen Zeichen der englischen Sprache aufgezählt und von Null bis 127 durchnummeriert. So hat beispielsweise der Buchstabe „A“ die Nummer 65 (binär: 100 0001), „B“ die 66 (binär: 100 0010) usw. Auch die Zeichen für die Ziffern haben eine Nummer: die Ziffer „1“ hat die Nummer 49 (binär: 11 0001). Auch „nicht druckbare“ Zeichen haben eine Nummer bekommen, zum Beispiel die Taste „Enter“ die Nummer 13 (binär: 0000 1101) und die Löschtaste „Rückschritt“ (Backspace) die 8 (0000 1000). In der nebenstehenden Tabelle sind einige Werte aufgeführt.

Hier ist die vollständige  ASCII-Tabelle.

Wenn auf der Tastatur eine Taste nicht funktioniert, drücken Sie die Alt-Taste, tippen Sie auf dem Ziffernblock den dreistelligen ASCII-Code ein und lassen Sie dann die Alt-Taste los. Notebooks haben keine separaten Tasten für den Ziffernblock, statt dessen funktionieren die Tasten rund um das „I“ wie der Ziffernblock, wenn man die Taste „Fn“ (unterste Reihe einer Notebook-Tastatur, zweite von links) gedrückt hält. Wenn Sie zusätzlich zur Fn-Taste die Alt-Taste drücken, erzeugen die Tasten den blau aufgedruckten Tastencode des Ziffernblocks. So können Sie auch einen ASCII-Code eingeben.

Ein Text im ASCII-Format enthält keine Formatierungen (Fett, Kursiv) oder Schriftarten. Wenn Sie den Editor aus der Zubehör-Programmgruppe verwenden oder eine Datei in MS Word als „Nur-Text“ speichern, wird ASCII verwendet.

Nun gibt es zahlreiche Buchstaben in anderen Sprachen, die im englischen Alphabet nicht vorkommen. Für deutsche Texte beispielsweise braucht man die Umlaute sowie das „ß“. Für die ursprünglichen 127 Zeichen der einfachen ASCII-Tabelle wurden deshalb mehrere Erweiterungstabellen mit je 128 zusätzlichen Zeichen zusammengestellt. Die in Amerika, Mitteleuropa und Australien verbreitete Kodierung „Latin-1“ enthält deutsche Umlaute, französische Accent-Zeichen und spanische Zeichen mit Tilde. Dazu kommen diverse kaufmännische und wissenschaftliche Zeichen. Weitere Erweiterungstabellen gibt es für griechische, slawische, nordische und einige andere Sprachen. Das „American National Standards Institute“ (das amerikanische Pendant zum DIN, dem Deutschen Institut für Normung) hat den einfachen und den erweiterten ASCII-Zeichensatz unter dem Namen „ANSI-Zeichensatz“ zusammengefasst.

Verwechseln Sie nicht den ASCII Code mit dem ANSI Code: Die ersten 127 Zeichen sind identisch, doch die restlichen 129 sind unterschiedlich. Der ANSI-Code enthält eine Menge nützlicher Sonderzeichen, die Sie auf der Tastatur nicht finden, wie z. B. £≠«»‰½¼¾∑®†→⇨•±÷∂ƒ©∆≤≈√∫~µ∞. Der ANSI-Code ist immer vierstellig und beginnt mit einer Null. Er wird ebenso wie der ASCII-Code eingegeben.

Unicode[Bearbeiten]

Nun reichen auch 256 Zeichen noch nicht für alle Sprachen aus. Japaner, Chinesen und zahlreiche andere Völker mit nicht-lateinischen Schriftzeichen waren benachteiligt und forderten eine praktikable Möglichkeit, die vielen Zeichen ihrer Sprache genau so selbstverständlich benutzen zu dürfen, wie wir das lateinische Alphabet am Computer benutzen. Deshalb entwickelten die Computerfachleute eine Codierung namens Unicode, mit der man alle jemals von Menschen verwendeten Schriftzeichen speichern kann, einschließlich sumerischer Keilschrift, ägyptischer Hieroglyphen und weiterer Schriftzeichen, die vielleicht zukünftig entdeckt werden. Unicode kann derzeit über 1,1 Millionen unterschiedliche Zeichen darstellen. Je nachdem, welches der vielen Zeichen man darstellen möchte, braucht man dafür 1 bis 4 Byte. Unsere lateinischen Buchstaben werden wie im ASCII-Standard mit einem Byte kodiert. Einige Zeichen der erweiterten ASCII-Tabelle verweisen auf eine der vielen Tabellen mit weiteren Zeichen. MS-Office, OpenOffice und die meisten anderen modernen Schreibprogramme erkennen automatisch, ob ein Text in ASCII oder in Unicode gespeichert ist.

Wollen Sie mehr über Zahlensysteme wissen?