Das Schneider CPC Systembuch

Grundlagen

Andere Zahlensysteme

Umrechnung dezimal -> binär

Das gerade vorgestellte Verfahren zur Die Basic-Vektoren: KonvertierungKonvertierung zwischen zwei Zahlensystemen, die Konversion durch sukzessive (wiederholte) Rechnen im Binärsystem: MultiplikationMultiplikation und Rechnen im Binärsystem: AdditionAddition, ist hauptsächlich geeignet, um eine Zahl aus einem fremden (dem Binär-) System in das eigene, geläufige (Dezimal-) System zu konvertieren. Der Grund liegt darin, dass man mit Zahlen im Zielsystem rechnen muss.

Mindestens genauso häufig ist aber auch der umgekehrte Weg nötig: Eine Zahl liegt im Dezimalsystem vor und soll jetzt in's Binärsystem umgesetzt werden. Hier empfiehlt sich das gegenteilige Verfahren.

Man nutzt wieder die Kenntnis der Andere Zahlensysteme: StellenwerteStellenwerte in der Stellen im Ziel-Zahlensystem aus:

(10101010)2
 ||||||||
 |      +---   1
 |           ...
 |
 +---------- 128

Wenn Man die Zahl (30)10 betrachtet. Kann man sofort entscheiden, welchen Wert die 8. Stelle dieser Zahl in Binärschreibweise hat?

Klar kann man. Die achte Binärstelle hat den Andere Zahlensysteme: StellenwerteStellenwert 128. Das ist viel größer als 30. Die achte Binärstelle wird also eine Vornull sein.

Wie ist es mit der 7. Binärstelle? Auch 64 ist größer als 30, also wird auch diese Stelle eine Real: NullNull enthalten.

Ebenso die 6. Binärstelle mit dem Andere Zahlensysteme: StellenwerteStellenwert 32.

Erst die 5. Stelle im Binärsystem hat einen kleineren Andere Zahlensysteme: StellenwerteStellenwert als 30, nämlich 16. Diese Stelle muss demnach eine '1' enthalten.

Die Gesamtzahl soll 30 darstellen. Stelle 5 enthält eine '1', was dieser Stelle den Wert 1*16=16 verschafft. Der Wert einer Zahl ergibt sich aber als Summe aller 'gewerteten Ziffern'. Deshalb muss der Wert aller restlichen Ziffern plus den Wert dieser Ziffer zusammen 30 ausmachen: 16+rest = 30. Anders ausgedrückt: Der Wert der restlichen Ziffern ist gleich 30-16 = 14.

Man kann jetzt praktisch 16 aus der Gesamtzahl herausziehen, die durch die Ziffer '1' auf der 5. Binärstelle abgedeckt sind. Übrig bleibt ein Rest (in diesem Fall 14), der nun mit den verbleibenden Stellen ausgedrückt werden muss.

Die nächste Stelle ist Datenbreite: Bits
Port B - Input: &F5xx: Bit 0:
Port B - Input: &F5xx: Bit 4:
Port B - Input: &F5xx: Bit 5:
Port B - Input: &F5xx: Bit 6:
Port B - Input: &F5xx: Bit 7:
Port C - Output: &F6xx: Bit 4:
Port C - Output: &F6xx: Bit 5:
Bit
4 mit einem Andere Zahlensysteme: StellenwerteStellenwert von nur noch 8. Auch 8 ist kleiner als 14. Deshalb muss Datenbreite: Bits
Port B - Input: &F5xx: Bit 0:
Port B - Input: &F5xx: Bit 4:
Port B - Input: &F5xx: Bit 5:
Port B - Input: &F5xx: Bit 6:
Port B - Input: &F5xx: Bit 7:
Port C - Output: &F6xx: Bit 4:
Port C - Output: &F6xx: Bit 5:
Bit
4 gesetzt werden (eine '1' auf der 4. Binärstelle) und übrig bleibt 14-8 = 6.

Der Vergleich mit 4 für die nächste Stelle ergibt wieder eine '1' und einen Rest von 2. Der nächste Andere Zahlensysteme: StellenwerteStellenwert ist dann 2. Diese Stelle erthält auch eine '1' und übrig bleibt nichts mehr.

Jetzt darf man keinesfalls komentarlos aufhören zu rechnen, weil ja die Ausgangszahl 'verbraucht' sei. Man kann entweder stur weiterrechnen (wie es vielleicht ein Computerprogramm machen wird) oder aber in einem Akt wirklicher Intelligenz alle restlichen Stellen auf Real: NullNull setzen. In unserem Beispiel betrifft das nur noch die letzte Stelle mit dem Andere Zahlensysteme: StellenwerteStellenwert 1.

Die Zahl (30)10 in's Binärsystem gewandelt sieht also wie folgt aus:

(00011110)2

Nachdem dieses Beispiel nun in aller Ausführlichkeit behandelt wurde, geht es bei dem folgenden etwas schematischer zu.

Konversion von (77)10 in's Binärsystem:

77 <  128 -> 0 Rest 77
77 >=  64 -> 1 Rest 77-64 = 13
13 <   32 -> 0 Rest 13
13 <   16 -> 0 Rest 13
13 >=   8 -> 1 Rest 13-8 = 5
 5 >=   4 -> 1 Rest  5-4 = 1
 1 <    2 -> 0 Rest  1
 1 >=   1 -> 1 Rest  0
             |
             +----> (01001101)2 = (1001101)2

Konversion von (48)10:

48 <  128 -> 0 Rest 48
48 <   64 -> 0 Rest 48
48 >=  32 -> 1 Rest 48-32 = 16
16 >=  16 -> 1 Rest 16-16 =  0
 0 <    8 -> 0 Rest 0
 0 <    4 -> 0 Rest 0
 0 <    2 -> 0 Rest 0
 0 <    1 -> 0 Rest 0
        |
        +------> (00110000)2 = (110000)2

Wenn man die Umsetzung einer Zahl betrachtet, so ergibt sich für jeden Schritt das folgende, einfache Bild:

(Rest-)Zahl <  Andere Zahlensysteme: StellenwerteStellenwert -> Stelle = 0 und Restzahl bleibt unverändert
(Rest-)Zahl >= Andere Zahlensysteme: StellenwerteStellenwert -> Stelle = 1 und Restzahl := Restzahl - Andere Zahlensysteme: StellenwerteStellenwert

Wichtig für dieses Verfahren ist es, die erste Test-Stelle hoch genug zu wählen. Will man beispielsweise die Zahl 130 konvertieren und fängt erst beim Andere Zahlensysteme: StellenwerteStellenwert 64 an, so kann man gar nicht darauf kommen, dass auch die Stelle mit dem Wert 128 eine '1' erhalten muss. Diesen Der Linien-Algorithmus: Fehler 3Fehler erkennt man aber spätestens, wenn man ganz zum Schluss nicht den Rest 0 herausbekommt:

130 >= 64 -> 1 Rest 130-64 = 66
 66 >= 32 -> 1 Rest  66-32 = 34
 34 >= 16 -> 1 Rest  34-16 = 18
 18 >=  8 -> 1 Rest  18- 8 = 10
 10 >=  4 -> 1 Rest  10- 4 =  6
  6 >=  2 -> 1 Rest   6- 2 =  4
  4 >=  1 -> 1 Rest   4- 1 =  3 !!!!

Dieses Konversionsverfahren ist übrigens nur der (binäre) Spezialfall eines anderen, das gleich beschrieben wird. Diese (allgemeine) Methode ist wieder geeignet, von jedem in jedes Zahlensystem zu übersetzen. Empfehlenswert ist es jedoch für Konversionen vom eigenen in ein fremdes Zahlensystem, da im Quellsystem gerechnet werden muss.

Valid HTML   Valid CSS