Formel zum Umrechnen von einem in ein anderes system
Übersicht

DerSatanGastBetreff: Formel zum Umrechnen von einem in ein anderes system |
![]() Antworten mit Zitat |
|
---|---|---|
Da ich mich mal dafür interessiert habe ob es eine allgemeine Formel zum Umrechnen von einem beliebigen Zahlensystem in das Dezimalsystem gibt habe ich mal das internet bemüht und das her gefunden:
X (die der zahl im anderen System entsprechende Zahl) = a(0) + a(1)*b + a(2)*b² + ... + a(n-1)*b^n-1 wobei a(n) (a(0),...) die Ziffer in der Zahl (von hinten gesehen also in 1101 ist a(0)=1 a(1)=0 a(2)=1 a(3)=1) in dem beliebigen System ist und b das System (16 für hexadezimal, 2 für dual, 10 für dezimal, ...). Jetzt frage ich mich natülich ob es eine allgemeine Formel gibt, mit der man von dezimalsystem in ein beliebiges System rechnen kann ![]() EDIT: Quelle ist Wikipedia |
||
![]() |
D2006Administrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zahl x in Stellenwertsystem mit Basis z umrechnen:
Rechne x mod z und schreib das Ergebnis hin. Rechne dann x durch z und schreib den ganzzahligen Wert auf die nächste zeile (also hack den Kommateil ab, wenn vorhanden). Das ganze solange, wie das x noch größer null ist. Dann von unten nach oben sidn die einzelnen Ergebnisse der mod Rechnugn die Ziffern der Zahl. Beispiel: Zitat: x=11; z=2
11 mod 2 = 1 5 mod 2 = 1 2 mod 2 = 0 1 mod 2 = 1 -> 1011 x=78; z=16 78 mod 16 = 14 (=E) 4 mod 16 = 4 -> 4E Was du da gefunden hast, nennt sich übrigens Horner Schema. |
||
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2 |
DerSatanGast |
![]() Antworten mit Zitat |
|
---|---|---|
Vielen Dank für die schnelle Antwort ist ne gute Idee danke für den Hnweis mit dem Horner-Schema.
P.S.: Ich musste mir den Text zwemal durchlesen da ich ncht alles gleich verstanden habe ^^ liegt aber wahrschenlich daran dass morgen für mich die neunte Klasse anfängt mt sowas hatten wir noch nicht gearbeitet^^ |
||
DerSatanGast |
![]() Antworten mit Zitat |
|
---|---|---|
So ich hab mich jetzt mal hingesetzt und auf die schnelle eine Funktion geschrieben (mit dem Horner-Schema rechnend), die mir jede beliebige Zahl in Zahlensystemen mit 0 bis 9... ach lest im Code nach^^
Code: [AUSKLAPPEN] Print InDez("4c3",16);4C3(Hex) ist im Dezimalsystem 1219, das kleine c macht auch nix, da in der Funktion sowieso alle Buchstaben grossgemacht werden(in=Upper(in))
WaitKey() End Function InDez(in$,base);Umrechnung von einem Alphanumerischen Zahlensystem mit 0-9 einzeln und A-F ;für 10-15 unter zuhlfenahme des Horner-Schemas ;Zur Info: X (die der zahl im anderen System entsprechende Zahl) = a(0) + a(1)*b + a(2)*b² + ... + ;a(n-1)*b^n-1 ;wobei a(n) (a(0),...) die Ziffer in der Zahl ;(von hinten gesehen also in 1101 ist a(0)=1 a(1)=0 a(2)=1 a(3)=1) in dem beliebigen System ist ;und b das System (16 für hexadezimal, 2 für dual, 10 für dezimal, ...). in=Upper(in) If Instr(in,",")<>0 Or Instr(in,".")<>0 Then Return 0;Um zu checken dass nur natürliche Zahlen ;vorhanden sind; wenn nicht, wird 0 zurückgegeben While in<>"" ;\ in2$=in2+Right(in,1) ; \ in=Left(in,Len(in)-1) ; /-Diese Schleife dreht "in" um Wend ;/ in=in2 For c=0 To Len(in)-1 Select Mid(in,c+1,1) Case "A" out=out+10*base^c Case "B" out=out+11*base^c Case "C" out=out+12*base^c Case "D" out=out+13*base^c Case "E" out=out+14*base^c Case "F" out=out+15*base^c Default out=out+Int(Mid(in,c+1,1))*base^c End Select Next Return out End Function Ich werde das noch erweitern, wenn ich mal wieder Zeit und Lust habe EDIT: Sry ich habe den Fehler im Code-Block erst bemerkt als es zu spät war, müsst ihr dann manuell ncoh beheben |
||
![]() |
aMulSieger des Minimalist Compo 01/13 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das Umdrehen kannst du dir sparen. Aber sonst ist die Funktion ganz in Ordnung. | ||
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans! Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver |
DerSatanGast |
![]() Antworten mit Zitat |
|
---|---|---|
Ich hab mir bei Wikipedia nen Artikel gefunden da stand drin , dass de Zahlen in umgekehrter Reihenfolge angezeigt werden müssten... mal nachschauen^^
EDIT: sry dass ich in letzter zeit so viel editiere aber ich hab mal die fünf zeilen mt dem umdrehen weggelassen es kam 964 glaub ich raus das ergebnis ist aber 1219 |
||
![]() |
aMulSieger des Minimalist Compo 01/13 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich sagte nicht, dass die Funktion so falsch ist, oder dass sie richtig ist, wenn man das umdrehen weglässt. Aber um es ein wenig performanter zu gestalten, kann man das Umdrehen weglassen zusätzlich folgende Zeile ändern:
Code: [AUSKLAPPEN] Mid(in,c+1,1)
; wird zu Mid(in, Len(in) - c ,1 ) Bei so vielen Aufrufen von Len() würde ich die Länge allerdings gleich zwischenspeichern. Das sollte das ganze noch ein bisschen schneller machen. EDIT: Ich war so aufmerksam, und habe mal eben die komplette Funktion einer Generalüberholung unterzogen: Code: [AUSKLAPPEN] Function InDez(in$, base)
in = Upper(in) If Instr(in, ",") <> 0 Or Instr(in, ".") <> 0 Then Return Local l, c, out, char$ l = Len(in) For c = 0 To l - 1 char = Mid(in,l - c,1) Select char Case "A" out = out + 10 * base ^ c Case "B" out = out + 11 * base ^ c Case "C" out = out + 12 * base ^ c Case "D" out = out + 13 * base ^ c Case "E" out = out + 14 * base ^ c Case "F" out = out + 15 * base ^ c Default out = out + Int(char) * base ^ c End Select Next Return out End Function Davon abgesehen, dass sie nun ca. 30% schneller ist sieht sie nun auch schöner aus. Imho. ![]() |
||
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans! Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver |
DerSatanGast |
![]() Antworten mit Zitat |
|
---|---|---|
Hey danke das hat echt geholfen! Ich hatte vorher beim 10000-fachen ausführen der Funktion mit 12 mal Programm starten eine Durchschnittsdauer von 200 jetzt ist es 180 (millisekunden)... das sind von 0,02 Millsekunden pro Funktionsdurchlauf auf 0,018 runtergegangen... mal sehen was sich noch verbessern lässt^^... ![]() Es gibt wirklich nichts was sich nicht verbessern lässt^^ |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group