001
29.12.2007, 00:38 Uhr
Hans
Library Walker (Operator)
|
Zahlendarstellungen
In der EDV ist es üblich, das man nicht nur mit den bekannten dezimalen Zahlen arbeitet, sondern auch mit sogenannten Binär- und Hexadezimalzahlen. Was es damit genau auf sich hat, und wie man von einer Darstellung zu einer anderen kommt, darum soll es im folgenden gehen.
Wenn wir im Alltag eine Zahl, wie zum Beispiel 4321 sehen, dann wissen wir, das es sich dabei um die Zahl Viertausend-dreihundert-einundzwanzig handelt. Ein Computer zeigt sie uns meisst auch so an, wenn wir ihn für uns rechnen lassen, oder wenn wir Texte oder Tabellen erstellen. Nun ist es heutzutage auch Allgemeinwissen, das im Computer alles aus Nullen und Einsen zusammengestellt wird. Aber wie das genau geht, ist schon wieder Fachwissen, das nicht mehr jeder hat. Denn wenn man mal unter der Oberfläche von Textverarbeitung oder Tabellenkalkulation nachsieht, dann findet man die 4321 als 0001 0000 1110 0001 dargestellt. Oder auch als 10e1. Das bedeutet beides 4321, nur jedesmal anders ausgedrückt. Diese Variante: 0001 0000 1110 0001 ist die binäre Darstellung, eben die Nullen und Einsen. Und diese Variante: 10e1 ist die hexadezimale Darstellung, mit der es Softwareentwickler öfter mal zu tun haben. Doch wie kommt man dazu? Fangen wir mit dem bekannten an.
Dezimales Zahlensystem
Unser dezimales Zahlensystem ist ein System, in dem jede Stelle einer Zahl eine bestimmte Wertigkeit zugeordnet wird. (Sowas nennt man auch Stellenwertsystem.) Das bedeutet nichts anderes als das z.B. eine vierstellige Zahl aus einer Tausender, einer Hunderter, einer Zehner und einer Einerstelle besteht. Also:
| Code: |
1234 ^^^^ |||| |||+- Einerstelle ||+-- Zehnerstelle |+--- Hunderterstelle +---- Tausenderstelle
|
Die Mathematik kennt nun die sogenannte Potenzschreibweise, mit deren Hilfe sich so ein Stellenwertsystem formal beschreiben lässt. Wenn man diese Potenzschreibweise auf das obige Beispiel anwendet, d.h. die Zahl 1234 mit Hilfe von Potenzen ausdrückt, kommt das hier dabei heraus:
1234 = 1*10^3 + 2*10^2 + 3*10^1 + 4*10^0
Dabei ist:
| Code: |
1*10^3 die Tausenderstelle = 1 * 1000 = 1000 2*10^2 die Hunderterstelle = 2 * 100 = 200 3*10^1 die Zehnerstelle = 3 * 10 = 30 4*10^0 die Einerstelle = 4 * 1 = 4
|
Wenn man die Zahlen in der letzten Spalte zusammenrechnet kommt 1234 heraus.
Anmerkungen zu Potenzen und zur Schreibweise Da die in der Mathematik übliche Schreibweise hier schlecht umsetzbar ist, wird das ^-Zeichen als Potenzzeichen benutzt, wie es auch manchen Programmiersprachen der Fall ist. BASIC wäre ein Beispiel dafür. Aber was bedeutet eigentlich Potenz? Wenn irgendwo, wie oben z.B. 10^3 oder 10³ (gelesen zehn hoch drei) steht, dann bedeutet dies das gleiche wie 10 * 10 * 10. Also bedeutet
10^3 = 10 * 10 * 10 = 1000
Die Hochzahl, (die im Fachchinesisch auch Exponent heisst) gibt an, wie oft die Zahl, an der sie dran steht, (im Fachchinesisch als Basis bezeichnet) mit sich selbst malzunehmen (zu multiplizieren) ist. Es ist ausserdem festgelegt, das irgendwas hoch Null also X^0 immer Eins ergibt. Deshalb kommt bei 10^0 auch 1 heraus. Ein weiteres Beispiel: Die Zahl 5847 stellt sich in der Potenzschreibweise so dar:
| Code: |
5847 = 5*10^3 + 8*10^2 + 4*10^1 + 7*10^0 = 5*1000 + 8*100 + 4*10 + 7*1 = 5000 + 800 + 40 + 7 = 5847
|
Binäres Zahlensystem
Das binäre Zahlensystem kennt nur zwei Ziffern, nämlich die Null und die Eins. Und im Gegensatz zum dezimalen Zahlensystem hat man es hier mit sogenannten Zweierpotenzen zu tun, während es im dezimalen System Zehnerpotenzen sind. Man hat also keine Zehner, Hunderter oder Tausenderstellen, sondern 2er, 4er, 8er usw. Die einzelnen Stellen sind wie folgt zugeordnet:
| Code: |
xxxx ^^^^ |||| |||+- Einerstelle, entspricht 2^0 = 1 ||+-- Zweierstelle, entspricht 2^1 = 2 |+--- Viererstelle, entspricht 2^2 = 4 +---- Achterstelle, entspricht 2^3 = 8
|
Nehmen wir nun als Beispiel die binäre Zahl 1001. Wenn man diese Zahl mit Hilfe von Potenzen ausdrückt, erhält man:
1001 = 1*2^3 + 0*2^2 + 0*2^1 + 1*2^0
Dabei ist:
| Code: |
1*2^3 die Achterstelle = 1 * 8 = 8 0*2^2 die Viererstelle = 0 * 4 = 0 0*2^1 die Zweierstelle = 0 * 2 = 0 1*2^0 die Einerstelle = 1 * 1 = 1
|
Also:
| Code: |
1001 = 1*2^3 + 0*2^2 + 0*2^1 + 1*2^0 = 1*8 + 0*4 + 0*2 + 1*1 = 8 + 0 + 0 + 1 = 9
|
Und damit haben wir die binäre Zahl auch gleich in eine dezimale Zahl umgerechnet. Wenn man öfter mit binären Zahlen zu tun hat, kann folgende tabellarische Darstellung hilfreich sein, um binäre Zahlen schnell in dezimale Zahlen umzurechnen:
| Code: |
2^7 | 2^6 | 2^5 | 2^4 | 2^3 | 2^2 | 2^1 | 2^0 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 ----+-----+-----+-----+-----+-----+-----+----- b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0
|
b7, b6, b5, b4, b3, b2, b1 und b0 sind dabei die Ziffern der binären Zahl, also entweder 0 oder 1, die man entsprechend in die Tabelle einträgt. Anhand der Wertigkeiten, die in der oberen bzw. mittleren Zeile stehen, kann man dann sehr schnell die Zahl bestimmen, indem man alle diejenigen Werte aus der mittleren Zeile zusammenzählt, die eine Eins in der unteren Zeile haben. Beispiel: Wir tragen die binäre Zahl 1100 1011 in die Tabelle ein:
| Code: |
2^7 | 2^6 | 2^5 | 2^4 | 2^3 | 2^2 | 2^1 | 2^0 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 ----+-----+-----+-----+-----+-----+-----+----- 1 | 1 | 0 | 0 | 1 | 0 | 1 | 1
|
D.h.
| Code: |
b7 = 1 | b3 = 1 b6 = 1 | b2 = 0 b5 = 0 | b1 = 1 b4 = 0 | b0 = 1
|
Die Zahlen aus den Spalten, in dessen unterster Zeile ein Eins steht, zählen wir zusammen. Hier also 128 + 64 + 8 + 2 + 1, macht zusammen 203. In Potenzschreibweise sieht die Zahl übrigens so aus:
1100 1011 = 1*2^7 + 1*2^6 + 0*2^5 + 0*2^4 + 1*2^3 + 0*2^2 + 1*2^1 + 1*2^0
Insgesammt lassen sich mit acht binären Stellen dezimale Zahlen zwischen Null und 255 darstellen, denn 128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 255.
Hexadezimales Zahlensystem
Da das binäre Zahlensystem auf Dauer etwas umständlich , bzw. schwer zu lesen ist, und Informatiker hin und wieder zu kurzschreibweisen neigen, haben sie das hexadezimale Zahlensystem erdacht. Das basiert auf der Zahl 16, d.h. mit einer Stelle können 16 verschiedene Werte angezeigt werden. Da unsere Schrift aber nur 10 Ziffernsymbole kennt, nämlich 0, 1, 2, 3, 4, 5, 6, 7, 8 und 9 haben die Erfinder des hexadezimalen Systems kurzerhand noch die ersten sechs Buchstaben des Alphabets, also a, b, c, d, e, f dazu genommen, um 16 verschiedene Werte mit einem Zeichen darstellen zu können. Die Zuordnung ist wie folgt:
| Code: |
Dez. Hex. | Dez. Hex. 00 00 | 08 08 01 01 | 09 09 02 02 | 10 0a 03 03 | 11 0b 04 04 | 12 0c 05 05 | 13 0d 06 06 | 14 0e 07 07 | 15 0f
|
Dabei ist es egal, ob man Gross- oder Kleinbuchstaben verwendet. Die Zahl A hat genau die selbe Bedeutung wie a, nämlich dezimal Zehn. Dieses System hat dazu noch die besondere Eigenschaft, jeweils vier binäre Ziffern zu einer hexadezimalen Ziffer zusammen zu fassen. Das sieht so aus:
| Code: |
Dez. Bin. Hex. 00 0000 0 01 0001 1 02 0010 2 03 0011 3
04 0100 4 05 0101 5 06 0110 6 07 0111 7 08 1000 8 09 1001 9 10 1010 a 11 1011 b
12 1100 c 13 1101 d 14 1110 e 15 1111 f
|
Und auch dieses System lässt sich natürlich in Potenzschreibweise darstellen. In diesem Fall rechnen wir mit 16er-Potenzen. Eine hexadezimale Zahl A3F9 stellt sich in Potenzform so dar:
A3f9 = 10*16^3 + 3*16^2 + 15*16^1 + 9*16^0
Die niedrigste Stelle hat dabei wieder die Wertigkeit Eins, die nächst höhere Stelle die Wertigkeit 16 und die Stelle darüber die Wertigkeit 16*16 = 256. Man kann also sagen, das man eine Einser-, eine 16er, eine 256er-Stelle, usw. hat. Das ist allerdings in der Praxis eher ungewöhnlich, soweit ich weis. Ich verwende es hier, um das Erklärungsmuster beibehalten zu können. Dann erhält man das folgende Bild:
| Code: |
xxxx ^^^^ |||| |||+- Einerstelle (1er), entspricht 16^0 = 1 ||+-- Sechzehnerstelle (16er), entspricht 16^1 = 16 |+--- Zweihundert-sechundfünfzigerstelle ( 256er), entspricht 16^2 = 256 +---- Viertausend-sechundneunzigerstelle (4096er), entspricht 16^3 = 4096
|
Damit erklärt sich auch, warum man bestenfalls noch von Einer oder Sechzehnerstellen spricht, alles darüber ist schon wieder zu umständlich.  Aber wir haben ja noch die Potenzschreibweise. Die ist kürzer und damit kann man besser rechnen. Also rechnen wir die hexadezimale Zahl A3F9 mal ins dezimale System um:
| Code: |
A3F9 = 10*16^3 + 3*16^2 + 15*16^1 + 9*16^0 = 10*4096 + 3*256 + 15*16 + 9*1 = 40960 + 768 + 240 + 9 = 41977 dezimal
|
Wie oben beschrieben, eignet sich die hexadezimale Darstellung auch sehr gut als eine Art Kurzfassung des Binären Systems gemäss der oben schon angegebenen Tabelle. Damit ergibt sich die binäre Form der hexadezimalen Zahl A3F9 zu:
| Code: |
hex. | a | 3 | f | 9 -----+------+------+------+------ Bin. | 1010 | 0011 | 1111 | 1001
|
oder 1010001111111001.
Ein weiteres Beispiel. Nehmen wir an, die ganz zu Anfang verwendete Zahl 4321 ist keine dezimale sondern eine hexadezimale Zahl. Was wäre das dezimal? Dazu müssen wir wieder die Potenzen bemühen, also:
| Code: |
4321 = 4*16^3 + 3*16^2 + 2*16^1 + 1*16^0 = 4*4096 + 3*256 + 2*16 + 1*1 = 16384 + 768 + 32 + 1 = 17185 dezimal
|
-- Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung. Dieser Post wurde am 29.12.2007 um 00:40 Uhr von Hans editiert. |