Atari Logo
Atari Computer

Hauptseite -
Welches System? -
Hardware -
Software -
Emulatoren -
Internet
MausNet
Programmieren
Verweise
Über

Zahlensysteme

In jedem Zahlensystem wird eine Zahl als eine Summe von Potenzen einer Basis b dargestellt. Für unser Dezimalsystem mit der Basis 10 bedeutet dies:

345 = 3 * 100 + 4 * 10 + 5 = 3 * 10^2 + 4 * 10^1 + 5 * 10^0

Die Einerstelle gibt also an, wie oft die Basis zur Potenz 0 (wir erinnern uns an dem Mathematikunterricht: eine Zahl hoch 0 ist 1, oder etwas mathematischer x^0 := 1) in der Zahl enthalten ist. Das ist bei unserem Beispiel 5 mal. Die Zehnerstelle gibt an, wie oft 10^1 = 10 enthalten ist usw.. Der Wertebereich der einzelnen Stellen ist dabei 0 - (b-1), geht also von 0 bis zu einer Zahl, die um 1 kleiner als die Basis ist. Etwas allgemeiner formuliert läßt sich eine Zahl wie folgt als Summe schreiben:

    n
   ---
   \            i
   /     a  * b
   ---    i
   i=0

Da man bei einem Computer sehr leicht die 2 Zustände 5V (positive Versorgungsspannung) und 0V (Masse, GND) unterscheiden kann, bietet sich die Basis 2 für die interne Darstellung an. Damit kommen wir zum Binär- oder Dualsystem. Da der Wertebereich immer um 1 kleiner als die Basis ist, haben wir für jede Stelle die 2 Ziffern 0 und 1. Jede einzelne Stelle wird auch Bit genannt. Eine Binärzahl sieht damit wie folgt aus:

101101 = 1*2^5 + 0*2^4 + 1*2^3 + 1*2^2 + 0*2^1 + 1*2^0
       = 1*32 + 1*8 + 1*4 + 1*1
       = 32 + 8 + 4 + 1
       = 45

Eigentlich doch ganz einfach, oder? Nur werden solche Zahlen leider etwas lang und unübersichtlich. Wenn man aber 4 Stellen des Binärsystems zu einer zusammenfassen könnte, würden für ein Byte nur noch 2 Stellen reichen. Mit 4 Binärstellen kann man die Zahlen 0 bis 15 (1111 = 2^3+2^2+2^1+2^0 = 8+4+2+1 = 15) darstellen. also nehmen wir die Basis 16 (wir erinnern uns? Die Basis ist um 1 größer als die größte Ziffer). Das ist dann das Hexadezimalsystem oder kurz Hex-System. Jetzt fehlen nur noch Ziffern für 10 - 15, wir müssen ja für jede Stelle eine einzelnes Zeichen schreiben. Dazu nehmen wir die Buchstaben a - f. Damit sieht unsere Zahl 45 so aus:

2d = 2*16^1 + 13*16^0 = 2*16 + 13*1 = 32 + 13 = 45

Analog wird das Oktalsystem zur Basis 8 gebildet. Hier könne 2 Stellen des Binärsystems zu einer zusammengefaßt werden.

Um nun zu erkennen, welches Zahlensystem benutzt wird, kann man der Zahl einen Präfix voranstellen. Eine Hexzahl wird mit einem Dollar '$' oder in C mit einem '0x' markiert. Binärzahlen bekommen oft ein angehängtes 'b'.

Wie kann man nun Zahlen zwischen den Zahlensystemen umrechen? Für die Umrechnung in das Dezimalsystem reicht obiges Verfahren aus. Um nun aus dem Dezimalsystem in ein anderes System umzurechnen, kann das folgende Verfahren benutzt werden:

Betrachte den Teilerrest, wenn die Zahl durch die neuen Basis geteilt wird (modulo). Dies ist die erste Stelle rechts. Teile die Zahl durch die Basis. Verfahre mit dem Ergebnis wie oben für die nächste Stelle bis das Ergebnis des Teilens 0 ist. Etwas anschaulicher an einem Beispiel:

45 : 2 = 22 Rest 1  -----------+
22 : 2 = 11 Rest 0 ----------+ |
11 : 2 =  5 Rest 1 --------+ | |
 5 : 2 =  2 Rest 1 ------+ | | |
 2 : 2 =  1 Rest 0 ----+ | | | |
 1 : 2 =  0 Rest 1 --+ | | | | |
                     | | | | | |
                     v v v v v v
                     1 0 1 1 0 1

Warum funktioniert das Verfahren? Wenn man sich nochmals die allgemeine Darstellung einer Zahl als Summe vor Augen führt, stellt man fest, daß jede Stelle mit Ausnahme der kleinsten die Basis mit einer Potenz größer gleich 1 als Wertigkeit hat. Und damit ist jede Stelle bis auf die erste glatt durch die Basis teilbar. Lediglich die erste Stelle ist 0 mal durch die Basis teilbar, da die Ziffern nur bis Basis - 1 gehen! Der Teilerrest ist also die Stelle mit der Wertigkeit Basis^0. Wenn wir die Zahl durch die Basis teilen, wissen wir, wie oft die Basis^1 in der Zahl enthalten ist. Da hier auch wieder größere Potenzen der Basis mit enthalten sein könnten, kann wieder das gleiche Verfahren wie für die erste Stelle benutzt werden. Da eine Beschreibung nur wenig anschaulich ist, sollten Sie selbst versuchen, einige Zahlen zu konvertieren.

Da jede Stelle nur mit positiven Ziffern gebildet wird, kann man so nur positive Zahlen darstellen. Die einfachste Lösung wäre, das oberste Bit als Vorzeichen zu betrachten. Es hat sich aber eine andere Darstellung, das Zweierkomplement, verbreitet, da hierbei eine Subtraktion auf eine Negierung und anschließende Addition des zweiten Operanden zurückgeführt werden kann. Wie funktioniert das nun? Dazu wird einfach die höchste Stelle immer mit einem negativen Vorzeichen versehen. Wenn wir uns ein char (8 Bit) betrachten, sieht das wie folgt aus:

00101101 = -0*2^7 + 0*2^6 + 1*2^5 + 0*2^4 + 1*2^3 + 1*2^2 + 0*2^1 + 1*2^0
         = 1*32 + 1*8 + 1*4 + 1*1
         = 32 + 8 + 4 + 1
         = 45
10101101 = -1*2^7 + 0*2^6 + 1*2^5 + 0*2^4 + 1*2^3 + 1*2^2 + 0*2^1 + 1*2^0
         = -1*128 + 1*32 + 1*8 + 1*4 + 1*1
         = -128 + 32 + 8 + 4 + 1
         = -83

Wenn man eine Zahl negieren möchte, kann man ganz einfach alle Bits drehen, also aus 1 eine 0 und aus 0 eine 1 machen und anschließend 1 addieren.

00101101 = -0*2^7 + 0*2^6 + 1*2^5 + 0*2^4 + 1*2^3 + 1*2^2 + 0*2^1 + 1*2^0
         = 1*32 + 1*8 + 1*4 + 1*1
         = 32 + 8 + 4 + 1
         = 45
11010010 = -1*2^7 + 1*2^6 + 0*2^5 + 1*2^4 + 0*2^3 + 0*2^2 + 1*2^1 + 0*2^0
         = -1*128 + 1*64 + 1*16 + 1*2
         = -128 + 64 + 16 + 2
         = -46
11010011 = -1*2^7 + 1*2^6 + 0*2^5 + 1*2^4 + 0*2^3 + 0*2^2 + 1*2^1 + 1*2^0
         = -1*128 + 1*64 + 1*16 + 1*2 + 1*1
         = -128 + 64 + 16 + 2 + 1
         = -45

Wer möchte, kann sich dies auch noch in der allgemeinen Summendarstellung anschauen und für eine beliebige Zahl überprüfen. Oder wie es so schön in Lehrbüchern heißt: der einfache Beweis sei dem Leser überlassen. Dies gilt auch für die Subtraktion als Negierung mit Addition.


Best viewed with any browser English version not yet available.

Änderungen und Irrtümer vorbehalten. Letzte Änderung:
14 September 2001.
Home - Mail an den Webmaster - Impressum