Umrechnung von Binärzahlen in Dezimalzahlen

Eine Dezimalzahl ist aufgebaut als Folge von Dezimal- Ziffern.
Als Gedankenexperiment kann man die Zahl zerlegen und wieder zusammenbauen: Dazu zählen wir die Stellen der Zahl von rechts her mit Null beginnend. Den Wert der Zahl erhält man, indem man die nullt-rechteste Ziffer mit 1 (gleich 10 hoch 0) multipliziert, die erst-rechteste Ziffer mit 10 (gleich 10 hoch 1), die zweit-rechteste Ziffer mit 100 (gleich 10 hoch 2) multipliziert , ... usw. und am Ende alle so gebildeten Zahlen wieder addiert.

Um z.B. den Wert der Dezimalzahl 206 zu berechnen, geht man so vor:
2*100 + 0*10 + 6*1 = 206

Addieren und Subtrahieren sind einfachere Rechenoperationen als Multiplizieren und Dividieren. Eine Multiplikation ist elementar betrachtet eine mehrfache Addition desselben Summanden. Obige Rechnung kann man also auch schreiben:
100+100 + 0*10 + 1+1+1+1+1+1

Statt eine Zahl aus Zehnerpotenzen aufzubauen kann man sie genausogut aus Zweierpotenzen zusammen setzen. Da das binäre Zahlensystem nur die Ziffern 0 und 1 kennt, entfällt hierbei die Unterscheidung zwischen Multiplikation und Mehrfach-Addition.

Eine Binärzahl ist strukturell aufgebaut wie eine Dezimalzahl, allerdings wird ihr Wert nicht dargestellt aus Potenzen von 10, sondern aus Potenzen der Zahl 2:

Die nullt-rechteste Binärziffer hat also das dezimale Gewicht 2 hoch 0 = 1
die erst-rechteste Binärziffer hat das dezimale Gewicht 2 hoch 1 = 2
die zweit-rechteste Binärziffer hat das dezimale Gewicht 2 hoch 2 = 4
die dritt-rechteste Binärziffer hat das Gewicht 2 hoch 3 = 8
die viert-rechteste Binärziffer hat das Gewicht 2 hoch 4 = 16
die fünft-rechteste Binärziffer hat das Gewicht 2 hoch 5 = 32
die sechst-rechteste Binärziffer hat das Gewicht 2 hoch 6 = 64
die siebt-rechteste Binärziffer hat das Gewicht 2 hoch 7 = 128
die acht-rechteste Binärziffer hat das Gewicht 2 hoch 8 = 256
die neunt-rechteste Binärziffer hat das Gewicht 2 hoch 9 = 512
die zehnt-rechteste Binärziffer hat das dezimale Gewicht 2 hoch 10 = 1024
... u.s.w.

Im binären Zahlensystem gibt es nur die Ziffern 0 und 1.
Um z.B den dezimalen Wert der Binärzahl 11001110 zu berechnen geht man so vor:
11001110=
1*128 + 1*64 + 0*32 + 0*16 + 1*8 + 1*4 + 1*2 + 0*1=
128 + 64 + 8 + 4 + 2 = 206

Bits setzen und löschen

In der Digitaltechnik bezeichnet man das in einem Byte am weitesten links stehende Bit als "Bit 7" und das am weitesten rechts stehende Bit als "Bit 0". Wie man durch Vergleich mit Obigem erkennt, ist also die Nummer eines Bits in einem Byte seine Potenz von 2.
Daraus leitet sich eine relativ leicht verständliche Anleitung zum Setzen und Löschen von Bits mittels Dezimalzahlen her:

Um ein nicht gesetztes Bit 7 eines Bytes zu setzen,
addiert man 128
Um ein gesetztes Bit 7 eines Bytes zu löschen,
subtrahiert man 128
Um ein nicht gesetztes Bit 6 eines Bytes zu setzen,
addiert man 64
Um ein gesetztes Bit 6 eines Bytes zu löschen,
subtrahiert man 64
Um ein nicht gesetztes Bit 5 eines Bytes zu setzen,
addiert man 32
Um ein gesetztes Bit 5 eines Bytes zu löschen,
subtrahiert man 32
Um ein nicht gesetztes Bit 4 eines Bytes zu setzen,
addiert man 16
Um ein gesetztes Bit 4 eines Bytes zu löschen,
subtrahiert man 16
Um ein nicht gesetztes Bit 3 eines Bytes zu setzen,
addiert man 8
Um ein gesetztes Bit 3 eines Bytes zu löschen,
subtrahiert man 8
Um ein nicht gesetztes Bit 2 eines Bytes zu setzen,
addiert man 4
Um ein gesetztes Bit 2 eines Bytes zu löschen,
subtrahiert man 4
Um ein nicht gesetztes Bit 1 eines Bytes zu setzen,
addiert man 2
Um ein gesetztes Bit 1 eines Bytes zu löschen,
subtrahiert man 2
Um ein nicht gesetztes Bit 0 eines Bytes zu setzen,
addiert man 1
Um ein gesetztes Bit 0 eines Bytes zu löschen,
subtrahiert man 1

Wesentlich eleganter und flexibler erreicht man dasselbe jedoch mit Hilfe der Boole'schen Algebra.


Umrechnung von Dezimalzahlen in Binärzahlen

Eine Zahl wird durch Division in ihre Ziffern zerlegt. Man teilt sie durch die höchste in ihr enthaltene Potenz von 10. Der Quotient ist dann der Wert dieser Zehnerstelle. Der Rest wird durch die nächst niedrigere Potenz von 10 geteilt usw.
Also:
Die höchste Zehnerpotenz, durch die man 206 sinnvoll teilen kann ist 100
206 geteilt durch 100 ergibt 2 Rest 6
6 geteilt durch 10 ergibt 0 Rest 6
6 geteilt durch 1 ergibt 6 Rest 0

Eine Division ist elementar betrachtet eine mehrfache Subtraktion desselben Subtrahenden. Obige Rechnung kann man also auch schreiben:
Man zieht solange 100 ab, bis der Rest kleiner ist als 100. Das kann man bei 206 zweimal tun, Rest 6
davon zieht man solange 10 ab bis der Rest kleiner ist als 10. Das kann man bei 6 nullmal tun, Rest 6
davon zieht man solange 1 ab, bis der Rest gleich 0 ist. Das kann man bei 6 sechsmal tun.

Statt eine Zahl in Zehnerpotenzen zu zerlegen, kann man sie genausogut nach Zweierpotenzen zerlegen. Da das binäre Zahlensystem nur die Ziffern 0 und 1 kennt, entfällt hierbei die Unterscheidung zwischen Division und Mehrfach-Subtraktion.

Ebenso wie bei der Zerlegung in Zehnerpotenzen geht man vor bei der Zerlegung einer Dezimalzahl in binäre Bits: Um eine Dezimalzahl in eine Binärzahl umzurechnen, zieht man von ihr systematisch Zweierpotenzen ab, wie oben mit Zehnerpotenzen gezeigt.

Die höchste Zweierpotenz, die man von 206 EIN-mal abziehen kann ist 128, der Rest ist 78. Hiervon 64 EIN-mal abziehen: Rest 14. Die nächst niedrigere Zweierpotenz, 32, kann man nicht, d.h. NULL-mal abziehen, Rest bleibt 14. Auch die nächst niedrigere Zweierpotenz, 16, kann man nur NULL-mal abziehen: Rest bleibt 14. Hiervon 8 EIN-mal abziehen: Rest 6 ... usw.

Kann man die Zweierpotenz vom Rest abziehen, wird die entsprechende Binärstelle gleich 1 gesetzt, die Zahl wird um den dezimalen Wert der Zweierpotenz vermindert und dieselbe Prozedur mit der nächst niedrigeren Zweierpotenz wiederholt ...

Kann von der dabei verbleibende Rest-Dezimalzahl die nächst kleinere Zweierpotenz nicht abgezogen werden, wird die entsprechende Binärstelle gleich 0 gesetzt und dieselbe Prozedur mit der nächst niedrigen Zweierpotenz wiederholt ...

Beispiel: Umwandlung der Zahl 206 in eine Binärzahl:
2 hoch 7 = 128 206-128 =78 Binärzahl = 1....
2 hoch 6 = 64 78-1*64=14 Binärzahl = 11...
2 hoch 5 = 32 14-0*32=14 Binärzahl = 110....
2 hoch 4 = 16 14-0*16=14 Binärzahl = 1100....
2 hoch 3 = 8 14-1*8=6 Binärzahl = 11001...
2 hoch 2 = 4 6-1*4=2 Binärzahl = 110011..
2 hoch 1 = 2 2-1*2=0 Binärzahl = 1100111.
2 hoch 0 = 1 0-0*1=0 Binärzahl = 11001110


Die Boole'sche Algebra bietet einen völlig anderen Ansatz zum Prüfen binärer Bits in Dezimalzahlen.
Um z.B. zu prüfen, ob Bit 4 (2 hoch 4 = 16) einer beliebigen (Dezimal-)Zahl N gesetzt ist, führt man den Rechenschritt aus:
TEST = N UND 16
Ist das Ergebnis TEST ungleich 0 , dann war das Bit in N gesetzt. Ist das Ergebnis TEST=0, dann war das Bit nicht gesetzt.
Das Verfahren eignet sich gut für Computerprogramme, kaum dagegen zum Kopfrechnen. Zu beachten ist, daß die logische UND-Funktion in den verschiedenen Programmiersprachen unterschiedliche Schreibweisen hat. In BASIC und LINGO heißt der Operator and -- in C, Java und Javascript dagegen &.

Aus dieser Betrachtung wird auch plausibel, warum bei unseren und anderen digitaltechnischen Produkten die Nummern der Eingänge und Ausgänge von 0 und nicht, wie es im "normalen Leben" ist, von 1 gezählt werden.


Hexadezimalzahlen - wie und warum?

Die Elementarvorgänge in einem Computer laufen binär ab, d.h. sind primär im binären Zahlensystem darzustellen. Leider sind Binärzahlen visuell oder gedanklich kaum einprägsam oder merkbar.
Das Hexadezimalsystem ist in dem Sinne eine abgeleitete, sekundäre Darstellungsweise, die es erlaubt, binäre Zahlen zu leicht handhabbaren Manipulations- Einheiten zusammenzufassen.

Bei Hexadezimal- Zahlen erfolgt der Übertrag nicht nach der 9, sondern nach der (dezimal)15. Um alle Hexadezimal- Ziffern mit einem einzigen Symbol dazustellen, nimmt man für die Darstellung der (Dezimal-)Zahlen 10 bis 15 im Hexadezimal- System die Buchstaben A B C D E F (Groß- und Kleinschreibung erlaubt). Das hexadezimale C ist also gleich der dezimalen 12. Mit einer einzigen Ziffer können im Hexadezimalsystem also 16 Zustände dargestellt werden. Um Hexadezimalzahlen von Dezimalzahlen zu unterscheiden, werden sie (z.B. in Programmcodes oder Manuals) mit einem Zusatz geschrieben. Am bekanntesten sind die Formen: vorangestelltes Dollarzeichen $, vorangestelltes 0x (bei C und Java), seltener auch nachgestelltes H.

Da 16 die vierte Potenz von 2 ist, lassen sich mit einer Hexadezimal-Ziffer genau die Zustände von 4 binären Signalen (Bits) darstellen. Eine Gruppe von 4 Bits heißt in der Informatik "Nibble". Ein Nibble ist also eine andere Bezeichung für eine Hexadezimalziffer.

Hexadezimalzahlen lassen sich besonders vorteilhaft anwenden, um Gruppen binärer Zustände kompakt zu beschreiben. Man stelle sich z.B. eine Gruppe von 4 digitalen Signalleitungen vor, von denen jede den Zustand 0 und 1 annehmen kann, also genau die Zustände einer binären Ziffer. Ordnet man jeder Leitung eine bestimmte Zweierpotenz als Gewicht zu, so lassen sich die Zustände aller Leitungen in einer einzigen Hexadezimal- Ziffer kompakt darstellen.

Während die Binärdarstellung ein quasi grafisches Bild der Leitungszustände ist, erlaubt die Hexadezimaldarstellung eine wesentlich kompaktere Beschreibung.

Hex-Ziffer   Bit3  Bit2  Bit1  Bit0    Dezimalwert
--------------------------------------------------
    0         0     0     0     0           0
    1         0     0     0     1           1
    2         0     0     1     0           2
    3         0     0     1     1           3
    4         0     1     0     0           4
    5         0     1     0     1           5
    6         0     1     1     0           6
    7         0     1     1     1           7
    8         1     0     0     0           8
    9         1     0     0     1           9
    A         1     0     1     0          10
    B         1     0     1     1          11
    C         1     1     0     0          12
    D         1     1     0     1          13
    E         1     1     1     0          14
    F         1     1     1     1          15

Diese Tabelle hat man mit einiger Übung ähnlich wie das kleine Einmaleins im Kopf.

Die Kombination von 2 Nibbles im Sinne einer 2-stelligen HexadezimalZAHL nennt man in der Informatik ein "Byte". Mit einem Byte lassen sich alle 256 möglichen Zustände von 8 binären Signalen darstellen.

Um eine Hexadezimalzahl zu kennzeichnen, sind verschiedene Methoden gebräuchlich. Eine davon, die auch auf dieser Website angewandt wird, besteht darin, ein Dollarzeichen vor die betreffende Hex-Zahl zu stellen. $AFFE und $DEADFACE sind also gültige Hexadezimal- Zahlen. Andere bekannte Darstellungsweisen stellen ein kleines "h" hinterher, also AFFEh bzw. DEADFACEh, oder -speziell in der Programmiersprache C - wird "0x" vorangestellt, also 0xAFFE bzw. 0xDEADFACE.

Das Byte $CE zum Beispiel läßt sich mit Hilfe obiger Tabelle schnell in seine Bitkombination 11001110 umrechnen. Der entsprechende Dezimalwert 206 hingegen kann selbst von erfahrenen Programmierern nicht leicht im Kopf in Bits umgerechnet werden. Die reine Binärzahl wiederum kann man sich schwer merken. Die Umrechnung von Bits in Zahlen und umgekehrt ist in der Praxis wichtig bei der Programmierung digitaler Ein- und Ausgänge und bei logischen Verknüpfungen. Daher sollten Sie die Hexadezimal- Darstellung nicht als Schikane oder Informatikspinnerei ansehen, sondern als eine aus der Sache begründete optimale Darstellung binärer Zustände anwenden.

Ein praktischer Vorteil der Hexadezimaldarstellung- weshalb diese auch in der Bedienungsanleitung für die MIDI-Sensorbox verwendet wird - ist die "übertragsfreie" Gliederung von Digitalcodes in Nibbles oder auch in einzelne Bits. Das erste MIDI-Datenbyte aller Nachrichten von und zu der Sensorbox läßt sich im Binär- bzw. Hexadezimalcode gliedern in ein "Befehlstyp-Nibble" und in ein "I/O-Kanal-Nibble". In der Hexadezimaldarstellung sind beide Bestandteile klar voneinander getrennt. Würde man die Codes dezimal darstellen, wäre aus den Zahlenwerten im Kopf diese Beziehung nicht herleitbar, außer für geniale Kopfrechenküstler.


Umrechnung von Hexadezimalzahlen in Dezimalzahlen

Wenn solche Umrechnungen häufig durchzuführen sind, lohnt es sich, einen Taschenrechner mit Hexadezimal-Modus anzuschaffen.

Die Umrechnung per Hand verläuft letzten Endes über die Binärdarstellung der Zahl, allerdings vereinfacht sich die Umrechnung durch eine "nibble-weise" Behandlung.
Um z.B. die Zahl $CE in ihren Dezimalwert umzurechnen, werden zuerst die Nibbles einzeln in ihre Dezimalwerte umgerechnet, dann jeweils mit ihrem dezimalen Gewicht multipliziert und schließlich addiert

Die nullt-rechteste Hexadezimal- Ziffer hat das dezimale Gewicht 16 hoch 0 = 1
die erst-rechteste Hexadezimal- Ziffer hat das dezimale Gewicht 16 hoch 1 = 16
die zweit-rechteste Hexadezimal- Ziffer hat das dezimale Gewicht 16 hoch 2 = 256
die dritt-rechteste Hexadezimal- Ziffer hat das dezimale Gewicht 16 hoch 3 = 4096
die viert-rechteste Hexadezimal- Ziffer hat das dezimale Gewicht 16 hoch 4 = 65536
die fünft-rechteste Hexadezimal- Ziffer hat das dezimale Gewicht 16 hoch 5 = 1048576

($C=dez.12) *16 + ($E=dez.14) *1
192+ 14= 206

Die umgekehrte Umrechnung erfolgt durch "Ausdividieren" der Dezimalzahl durch die dezimalen Gewichte der Potenzen von 16:
206 geteilt durch 16 ist 12, Rest 14. Die Hexadezimaldarstellung von dez.12 ist $C.
14 geteilt durch 1 ist 14. Die Hexadezimaldarstellung von dez.14 ist $E.
Durch Multiplikation dieser hexadezimalen Ziffern mit ihren hexadezimalen Gewichten wird die Zahl dargestellt:
$C * $10 + $E * 1 = $C0 + $E = $CE



* Informationsstand Juni '03. Technische Änderungen vorbehalten.
* Alle Informationen nach bestem Wissen, jedoch ohne Gewähr und unter Ausschluß jeglicher Haftung.
* Im Text zitierte Warenzeichen und Produktnamen sind Eigentum ihrer Eigentümer.