Heutige Computer funktionieren mit Strom. Darum gibt es zwei Zustände: Strom ist da oder nicht. Die analoge Informationseinheit heißt Bit mit dem Inhalt 0 oder 1.
Wenn man zwei Leitungen hat, ergeben sich 4 mögliche Signale.
Leitung 1 | Leitung 2 | Zahlenwert |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 2 |
1 | 1 | 3 |
Eine weitere Leitung verdoppelt die Menge der Zustände und damit den Höchstwert, der darstellbar ist.
Leitungen | Zustände | Wertebereich |
---|---|---|
1 | 1 | 0 bis 1 |
2 | 4 | 0 bis 3 |
3 | 8 | 0 bis 7 |
4 | 16 | 0 bis 15 |
Speicherung und Addition
Wir gehen weiterhin von einem Speicher der Größe 4 Bit aus. Es sollen die Zahlen 7, 4 und 3 binär dargestellt werden.0 0 0 0 4 Bit 8 4 2 1 Stellenwerte 0 1 1 1 dez. 7 = 0*8 + 1*4 + 1*2 + 1*1 0 1 1 1 dez. 4 = 0*8 + 1*4 + 0*2 + 0*1 0 1 1 1 dez. 3 = 0*8 + 0*4 + 1*2 + 1*1Wir addieren die Zahlen 7 (binär 0111) und 4 (binär 1000).
0 1 1 1 dez. 7 0 1 0 0 dez. 4 1 Übertrag 1 0 1 1 Ergebnis dez. 111 + 1 ergibt 0 mit einem Übertrag in die nächste Stelle.
Subtraktion
Wir ziehen 4 von 7 ab. Das ist unproblematisch, weil ohne Übertrag.0 1 1 1 dez. 7 0 1 0 0 dez. 4 Übertrag 0 0 1 1 Ergebnis dez. 3Wir ziehen 1 von 4 ab. Hier kommt es zu einem Übertrag.
0 1 0 0 dez. 4 0 0 0 1 dez. 1 1 1 Übertrag 0 0 1 1 Ergebnis dez. 30 - 1 ergibt 1 mit einem Übertrag von 1 auf die nächste Stelle
Negative Zahlen
Bisher gab es nur positive Zahlen. Wie muss eine negative Zahl aussehen?Wir versuchen es mit -1, indem wir 1 von der 0 abziehen.
0 0 0 0 dez. 0 0 0 0 1 dez. 1 1 1 1 Übertrag 1 1 1 1 Ergebnis -1Die -1 entspricht exakt der Kodierung von 15. Ob ein binärer Wert also negativ oder positiv ist, ergibt sich aus dem Betrachtungskontext.
Gegenprobe: Wir addieren eine 1 auf -1 und müssten 0 erhalten.
1 1 1 1 dez. 1 0 0 0 1 dez. -1 1 1 1 1 Übertrag 0 0 0 0 Ergebnis 0Wenn wir weiterhin immer eine 1 abziehen ergeben sich folgende Werte:
1 1 1 1 dez. -1 1 1 1 0 dez. -2 1 1 0 1 dez. -3 1 1 0 0 dez. -4 1 0 1 1 dez. -5 1 0 1 0 dez. -6 1 0 0 1 dez. -7 1 0 0 0 dez. -8Faustregel: Um aus einer positiven binären Zahl das negative Gegenstück zu erzeugen, invertiert man alle Ziffern und addiert anschließend eine 1 auf.
Man bezeichnet diese Darstellung als Zweierkomplement. Eine negative Zahl ist an einer 1 in der ersten Stelle erkennbar.
Rechnen mit negativen Zahlen
Bei der Subtraktion einer großen Zahl von einer kleinen Zahl muss eine negative Zahl herauskommen. Wir subtrahieren 7 von der 40 1 0 0 dez. 4 0 1 1 1 dez. 7 1 1 1 0 Übertrag 1 1 0 1 Ergebnis dez. -3Es müsste bei der Subtraktion das gleiche Ergebnis herauskommen, wie bei der Addition mit einer negativen Zahl. Gegenprobe: Addieren -7 und 4
0 1 0 0 dez. 4 1 0 0 1 dez. -7 Übertrag 1 1 0 1 Ergebnis dez. -3
Oktalzahlen
Binäre Zahlen sind aufgrund der vielen Stellen schnell unübersichtlich.Eine Umrechnung nach dezimal und zurück ist nicht schnell gemacht.
Idee: Eine einfache Darstellung durch Zusammenfassung von je drei Bits zu einer Ziffer zwischen 0 und 7. Das ergibt ein oktales Zahlensystem.
Konvention: Oktalen Zahlen wird eine 0 vorangestellt.
Beispiel die binäre Zahl 10101110 ist dezimal 174 und oktal 0256.
1 0 1 0 1 1 1 0 --- ----- ----- 2 5 6Umrechnung von oktal 0256 nach dezimal durch Muliplikation der Stellen mit 8er-Potenzen.
2*8*8 + 5*8 + 6*1 = 174Nachteil: Drei Stellen passen nicht gut zu 8, 16 oder 32 Bit.
Hexadezimale Zahlen
Bessere Idee: Immer vier Bit zu einer Ziffer zusammenfassen.Nach der 9 werden die ersten Buchstaben des Alphabets angehängt. 10 wird A, 11 wird B, 12 wird C, 13 wird D, 14 wird E und 15 wird F. Kennzeichnung durch voranstellen von 0x.
Für ein Byte werden nun exakt zwei Stellen hexadezimal verwendet.
1 0 1 0 1 1 1 0 ------- ------- A EUmrechnung von 0xAE nach dezimal: 10*16 + 14*1 = 160 + 14 = 174 (dez)
Beispiel: Internet-Adressen
Beispielsweise haben verwenden Internetadressen nach dem Standard IPv4 vier Bytes. Eine solche Adresse könnte also in den verschiedenen Darstellungsformen so aussehen:1100 0000 1010 1000 0000 0001 0000 0010 binär C 0 A 8 0 1 0 2 hexadezimal 192 168 1 2 dezimalAlso ist die IP-Adresse 0xC0A80102, oft auch als 192.168.1.2 geschrieben, weil die meisten Menschen hexadezimal nicht gut verstehen.
Von besonderer Bedeutung ist, wenn alle Bits auf 1 stehen (Broadcast oder Masken).
1111 1111 1111 1111 1111 1111 1111 1111 binär F F F F F F F F hexadezimal 255 255 255 255 dezimalalso 0xFFFFFFFF oder 255.255.255.255
Beispiel: RGB-Farben
Farben werden im Computerbereich durch ihren Anteil der Farben Rot, Grün und Blau festgelegt. In einer RGB-Darstellung ergibt sich ein Byte pro Farbanteil.rot | grün | blau | |
---|---|---|---|
FF | 00 | 00 | rot |
00 | FF | 00 | grün |
00 | 00 | FF | blau |
FF | FF | 00 | gelb |
00 | FF | FF | türkis |
FF | 00 | FF | violett |
7F | 7F | FF | hellblau |
FF | FF | FF | weiß |
00 | 00 | 00 | schwarz |
Fließkommazahlen
Fließkommazahlen in der Exponentialschreibweise- Große Zahlen: 12E6 eine 12 mal 10 hoch 6. 12.000.000, also 12 Millionen.
- Kleine Zahlen: 12E-6: 12 mal 10 hoch -6. 0,000.012
Eine Fließkommazahl besteht aus einem Vorzeichen, einer Mantisse und einem Exponenten, der positiv oder negativ sein kann. Die Mantisse stellt die Ziffernstellen der Zahl dar.
Vorzeichen | Mantisse | Exponent |
---|---|---|
1 Bit | 23 Bit | 8 Bit |
1 Bit | 52 Bit | 11 Bit |
-
Wikipedia IEEE 754
Brüche nicht immer dezimal darstellbar
Bei der Rechnung mit Fließkommazahlen gibt es Probleme bei der Genauigkeit der Nachkommadezimalstellen. Der Hintergrund ist, dass dezimale Zahlen binär dargestellt werden.Dezimale Nachkommastellen werden durch Zehntel, Hundertstel und so fort gebildet.
Binäre Brüche sind 1/2, 1/4, 1/8 und so weiter.
Bei der Umwandlung kann es Probleme geben, wie bei der Umwandlung von Dritteln in Dezimal offensichlich sind:
10 / 3 sind 3,333333... Multipliziert man den Wert mit 3 ergibt sich 9,9999999...
Binärbrüche
Wie stellt man 0,1 binär dar?1/10 ist kleiner als 1/8, aber größer als 1/16?
Binärbruch | Ziffer | Rest |
---|---|---|
1/2 | 0 | 0,1 |
1/4 | 0 | 0,1 |
1/8 | 0 | 0,1 |
1/16 | 1 | 0,0375 |
1/32 | 1 | 0,00625 |
1/64 | 0 | 0,00625 |
1/128 | 0 | 0,00625 |
1/256 | 1 | 0,00234375 |
1/512 | 1 | 0,000390625 |
zweierpotenz = 1.0 dezi = 0.1 i = 1 binziffer = "" while i<40: zweierpotenz *= 2 bruch = 1.0/zweierpotenz if bruch<=dezi: dezi = dezi - bruch binziffer += "1" else: binziffer += "0" i = i + 1 print(binziffer)Das Ergebnis des Programms lautet:
000110011001100110011001100110011001100Der Wechsel zwischen 2 Nullen und 2 Einsen wiederholt sich bis in alle Ewigkeit. Darum gilt: Ein Zehntel ist binär nur durch eine Periode darstellbar.
Was hat das für Konsequenzen? Wir schreiben ein Python-Programm, das von 0.5 immer wieder 0.1 abzieht, bis es bei --0.5 ankommt. Dabei muss irgendwann die 0 auftauchen, oder?
zahl = 0.5 dezi = 0.1 while zahl>-0.5: zahl -= dezi print(zahl)Auf dem Bildschirm erscheint:
0.4 0.30000000000000004 0.20000000000000004 0.10000000000000003 2.7755575615628914e-17 -0.09999999999999998 -0.19999999999999998 -0.3 -0.4 -0.5
Größeneinheiten
8 Bit im Verbund sind ein Byte210 = 1024
Darum 1 KByte = 1024 Byte. Achtung: statt km oder kg wird das k hier großgeschrieben.
1024 KByte = 1 MByte (Mega)
1024 MByte = 1 GByte (Giga)
1024 GByte = 1 TByte (Terra)
Verkäufer rechnen die Größen gern in 1000er-Faktoren, da dann die Zahlen größer sind.