Andere ZahlensystemeZahlen mit 'Dezimal'punkt in anderen ZahlensystemenGenauso wie im Zehnersystem lassen sich in allen anderen Andere Zahlensysteme: Polyadische Zahlensystemepolyadischen Zahlensystemen auch 'krumme' Werte angeben. Um zu ergründen, wie das geht, sieht man sich am besten einmal eine solche Zahl in dezimaler Schreibweise an: 1 1 1 825,125 = 8*100 + 2*10 + 5*1 + 1*---- + 2*----- + 5*------ 10 100 1000 825,125 = 8*10^2 + 2*10^1 + 5*10^0 + 1*10^(-1) + 2*10^(-2) + 5*10^(-3) - - - -- -- -- Wie man sieht, geht es hinter dem Komma gerade so weiter, wie es davor aufgehört hat. Das Komma kennzeichnet nur die Stelle, an der das Vorzeichen des 'Stellenexponenten' wechselt. Diese Stelle muss wahrhaftig irgendwie gekennzeichnet werden. Denn wie bei den unendlich vielen Vornullen erkennt man hier, dass es nach hinten ebenfalls unendlich weit weitergeht: 825,125 = ...000000000000000000000825,1250000000000000000000000... Manchmal werden auch tatsächlich alle Stellen gebraucht: ______ 1/7 = 00000000,14285712857142857142857... = 0,142857 Wofür dann ein Querstrich die unendlich wiederholte Periode kennzeichnet. Umrechnung in's Dezimal-SystemMit diesem Wissen gerüstet, sollte es jetzt eigentlich möglich sein, eine binäre oder hexadezimale Kommazahl in's dezimale zu übertragen: (10,101)2 = (?)10 (10,101)2 = 1*2^1 + 0*2^0 + 1*2^(-1) + 0*2^(-2) + 1*2^(-3) = 2,0000 2^ 1 = 2 + 0,0000 2^ 0 = 1 + 0,5000 2^-1 = 1/(2^1) = 1/2 = 0.5 + 0,0000 2^-2 = 1/(2^2) = 1/4 = 0.25 + 0,1250 2^-3 = 1/(2^3) = 1/8 = 0.125 -------- = (2,625)10 (8,Der Zeichensatz des Schneider CPC: &F8 = 248F8)16 = (?)10 (8,Der Zeichensatz des Schneider CPC: &F8 = 248F8)16 = 8*16^0 + 15*16^(-1) + 8*16^(-2) = 8*1 + 15*0.0625 + 8*0.00390625 = 8,00000 0,93750 0,03125 ------- = (8,96875)10 Umrechnung in's fremde ZahlensystemSo, wie es keine Schwierigkeiten bereitet, gebrochene Zahlen aus dem Binär-oder Hexadezimalsystem in's dezimale zu konvertieren, bereitet auch die Gegenrichtung keine Probleme. Man fängt wie bei der 'normalen', ganzzahligen Methode an, und hört einfach nicht am Komma auf, sondern erst, wenn der Rest Real: NullNull wird. (12,125)10 = (?)2
12,125 / 16 = 0,??? Rest: 12,125 - 0*16 = 12,125
12,125 / 8 = 1,??? Rest: 12,125 - 1* 8 = 4,125
4,125 / 4 = 1,??? Rest: 4,125 - 1* 4 = 0,125
0,125 / 2 = 0,??? Rest: 0,125 - 0* 2 = 0,125 -- Queues als verkettete Liste: Anmerkung:Anmerkung:
0,125 / 1 = 0,125 Rest: 0,125 - 0* 1 = 0,125 /
0,125 * 2 = 0,25 Rest: 0,125 - 0/ 2 = 0,125 <- z/(2^(-n)) = z*2^n
0,125 * 4 = 0,5 Rest: 0,125 - 0/ 4 = 0,125 \ z*(2^(-n)) = z/2^n
0,125 * 8 = 1,0 Rest: 0,125 - 1/ 8 = 0,000 --
|
+---> (01100,001)2
Man beachte die in der Queues als verkettete Liste: Anmerkung:Anmerkung erklärte Vereinfachung: Statt mit 1/2, 1/4, 1/8 etc. weiterzurechnen, kann man auch den (einfacheren) Kehrwert benutzen und Rechnen im Binärsystem: MultiplikationMultiplikation und Rechnen im Binärsystem: DivisionDivision austauschen. Zwischen der Stelle mit dem 'Stellenexponenten' '0' und '-1' (Andere Zahlensysteme: StellenwerteStellenwert im Binärsystem: '1' und '1/2') muss auch das Komma eingefügt werden! (8,96875)10 = (?)16
8,96875 / 16 = 0,??? Rest: 8,96875 - 0* 16 = 8,96875
8,96875 / 1 = 8,??? Rest: 8,96875 - 8* 1 = 0,96875
0,96875 * 16 =15,??? Rest: 0,96875 -15/ 16 = 0,03125
0,03125 *256 = 8.000 Rest: 0,03125 - 8/256 = 0,000
|
+---> (08,Der Zeichensatz des Schneider CPC: &F8 = 248F8)16
Noch eine weitere Vereinfachung ist bei den Nachkommastellen möglich: Statt den Rest zuerst mit LOW KERNEL JUMPBLOCK: 000B: LOW KL LOW PCHL (27.538)10 = (?)10 (normale 'Konversion') 27,538 / 10 = 2,??? Rest: 27,538 - 2* 10 = 7,538 7,538 / 1 = 7,??? Rest: 7,538 - 0* 1 = 0,538 0,538 * 10 = 5,??? Rest: 0,538 - 5/ 10 = 0,038 0,038 * 100 = 3,??? Rest: 0,038 - 3/ 100 = 0,008 0,008 *1000 = 8,000 Rest: 0,008 - 8/1000 = 0,000 | +---> (27,538)10 (27.538)10 = (?)10 (mit Verschieben nach Links) 27,538 / 10 = 2,??? Rest: 27,538 - 2*10 = 7,538 7,538 / 1 = 7,??? Rest: 7,538 - 7* 1 = 0,538 0,538 * 10 = 5,380 Rest: 5,380 - 5* 1 = 0,380 0,380 * 10 = 3,800 Rest: 3,800 - 3* 1 = 0,800 0,800 * 10 = 8,000 Rest: 8,000 - 3* 1 = 0,000 | +---> (27,538)10 Nach der 'Scheinwandlung' von Dezimal nach Dezimal als praktisches Beispiel die Wandlung in's hexadezimale: (10,650390625)10 = (?)16
10,650390625 / 16 = 0,??? Rest: 10,650390625 - 0*16 = 10,650390625
10,650390625 / 1 = 10,??? Rest: 10,650390625 - 10* 1 = 0,650390625
0,650390625 * 16 = 10,40625 Rest: 10,40625 - 10* 1 = 0,40625
0,40625 * 16 = 6,5 Rest: 6,5 - 6* 1 = 0,5
0,5 * 16 = 8,000 Rest: 8,000 - 8* 1 = 0,000
|
+----> (0Operationen: BD5B / 349A / 349A: FLO SUBA,A68)16
|