Das Schneider CPC Systembuch

Grundlagen

Andere Zahlensysteme

Umrechnung dezimal -> hex

Für die umgekehrte Richtung kommt man mit dem Verfahren, das bei der Konversion von Dezimal nach Binär gezeigt wurde, nicht sehr weit. Wie bereits angedeutet, ist das Binär-Verfahren eine Kurzform eines allgemeinen Verfahrens.

Das Problem ist, dass jetzt eine einfache Unterscheidung von 'kleiner' und 'größer gleich' nicht ausreicht. Beim Binärsystem musste nur zwischen zwei Zuständen (0 und 1) unterschieden werden, beim hexadezimalen Zahlensystem jetzt aber zwischen 16 Ziffern.

Das reine 'Subtraktionsverfahren' bei den Binärzahlen muss so erweitert werden, dass mehr Zustände erfasst werden.

Als Beispiel soll zunächst einmal die Zahl (50)10 mit der Methode 'Try and Error' nach Hex konvertiert werden.

Erste Frage: Benötigen wir drei Stellen? Das lässt sich leicht beantworten: Der Andere Zahlensysteme: StellenwerteStellenwert der dritten Stelle ist 16^2 = 256 und das ist weit größer als 50. Die dritte Stelle wird nicht benötigt oder erhält als Wert die Real: NullNull.

Die zweite Stelle hat den Andere Zahlensysteme: StellenwerteStellenwert 16^1 = 16. Das ist kleiner als 50. Stünde hier eine '1', so wäre der gewichtete Wert dieser Stelle 16, die Restzahl wäre nachher 50-16 = 34.

34 ist aber auch größer als 16 und liesse sich demnach mit der letzten Ziffer alleine nicht mehr ausdrücken. '1' ist zu klein. Wie steht es mit '2'? Der gewichtete Wert ist dann 2*16 = 32. Als Rest blieben 50-32 = 18. Immer noch zu viel.

Der Versuch mit '3' zeigt Erfolg: 50 = 3*16 + 2. Es bleibt also nur ein Rest von '2', der dann auch gleich die letzte Ziffer ist:

(50)10 = (32)16

Wie kann man diesem Verfahren nun aber 'Iterationen - Schleifen: StrukturStruktur' verleihen? Das ständige Auftreten eines 'Restes' legt die Vermutung nahe, dass hier vielleicht mit der Rechnen im Binärsystem: DivisionDivision etwas zu holen sei. Folgende Überlegung verstärkt noch diesen Eindruck:

Wenn auf der Stelle mit dem Andere Zahlensysteme: StellenwerteStellenwert 'S' die Ziffer 'Z' steht, so ergibt sich der gewichtete Wert 'W' = 'S'*'Z'. Besteht die Zahl ansonsten nur aus Real: NullNullen, so ist 'W' mit dem Wert der Zahl identisch. Man kann dann die Gleichung umstellen, um die Ziffer zu berechnen:

     W
Z = ---       Ziffer = gewichteter Wert = Zahl / Andere Zahlensysteme: StellenwerteStellenwert
     S

Beispiel im Dezimalsystem:

00100 /   100 = 1
00200 /   100 = 2
50000 / 10000 = 5
00003 /     1 = 3

Wie ändert sich das Bild, wenn nach der betrachteten Stelle noch Ziffern ungleich Real: NullNull auftauchen? Egal wie groß die nachfolgenden Stellen auch sind, ihr 'Rest'-Wert wird nie den Andere Zahlensysteme: StellenwerteStellenwert der betrachteten Ziffer erreichen. Eine neue Stelle wird ja gerade immer dann benötigt, wenn sich eine Zahl mit den vorhandenen Stellen nicht mehr darstellen liesse. Die Zahl 1000 benötigt eben 4 Stellen und kommt mit 3 nicht mehr aus. Demgegenüber ist 999 die größte dreistellige Dezimalzahl.

Beispiel im Dezimalsystem:

07654 /  1000 = 7,654
00768 /   100 = 7,68
91539 / 10000 = 9,1539

Dividiert man also diese Zahl durch den Andere Zahlensysteme: StellenwerteStellenwert, so wird die Ziffer auf dieser Position vor dem Komma und die folgenden Ziffern als Bruchteil erscheinen.

Können auch noch vor der betrachteten Stelle signifikante Ziffern (größer Real: NullNull) auftreten, so überschreitet die Zahl vor dem Komma die höchste Ziffer des jeweiligen Zahlensystems:

09745 / 10 = 974,5

Dieser Fall tritt aber nicht auf, wenn man hoch genug anfängt und dann immer nur mit dem Rest weiterrechnet, wie es bereits beim reinen 'Subtraktionsverfahren' für Binärzahlen praktiziert wurde.

Konversion mittels sukzessiver Division mit Rest

Das verwendete Verfahren nennt sich "Konversion mittels sukzessiver (wiederholter) Rechnen im Binärsystem: DivisionDivision mit Rest" was ziemlich genau beschreibt, wie es abläuft. Im Folgenden wird die Zahl (600)10 nach Hex konvertiert:

Wir beginnen mit der dritten Stelle. Andere Zahlensysteme: StellenwerteStellenwert ist 16^2 = 256:

600/256 = 2,344

Die Ziffer auf der dritten Stelle ist also '2'. Die Nachkommastellen dürfen nun nicht mit dem 'Rest' verwechselt werden. Der errechnet sich folgendermassen:

600 - 2*256 = 88

Die restlichen Stellen (noch zwei Ziffern) müssen also 88 ergeben. Der 'Anteil' 2*256 = 512 wird durch die '2' auf der dritten Stelle abgedeckt.

Der Andere Zahlensysteme: StellenwerteStellenwert der zweiten Stelle ist 16^1 = 16:

88/16 = 5,5

Die Ziffer auf der zweiten Stelle ist also '5'. Der verbleibende Rest ist:

88-16*5 = 8

Der Andere Zahlensysteme: StellenwerteStellenwert der ersten Stelle (die letzte in Schreibrichtung) ist dann einfach 8/1='8'. Das Ergebnis der Konversion in's hexadezimale Zahlensystem ist also:

(600)10 = (258)16

Nun noch zwei Beispiele in eher tabellarischer Form, um die Methode zu vertiefen:

    (10000)10 = (?)16

    10000 /65536 =  0,???    Rest: 10000- 0*65536 = 10000
    10000 / 4096 =  2,???    Rest: 10000- 2* 4096 =  1808
    1808 /  256 =  7,???    Rest:  1808- 7*  256 =    16
    16 /   16 =  1,0      Rest:    16- 1*   16 =     0
        0 /    1 =  0,0      Rest:     0- 0*    1 =     0
                    |
                    +---> (02710)16


    (123456)10 = (?)16

    123456 / 65536 = 1,???   Rest: 123456- 1*65536 = 57920
    57920 /  4096 =14,???   Rest:  57920-14* 4096 =   576
    576 /   256 = 2,???   Rest:    576- 2*  256 =    64
        64 /    16 = 4,0     Rest:     64- 4*   16 =     0
        0 /     1 = 0,0     Rest:      0- 0*    1 =     0
                    |
                    +----> (1E240)16

Valid HTML   Valid CSS