Ich habe mich mit der Mathematik beschäftigt, die dahinter steckt, von einer Basis zu einer anderen Basis zu konvertieren. Hier geht es vor allem darum, meine Ergebnisse zu bestätigen. Ich habe meine Antwort auf mathforum.org gefunden, bin mir aber immer noch nicht sicher, ob ich die richtige Antwort habe. Ich habe das Konvertieren von einer größeren Basis zu einer kleineren Basis in Ordnung, da es einfach ist, die erste Ziffer mit der Basis zu multiplizieren, die Sie als nächste Ziffernwiederholung hinzufügen möchten. Mein Problem tritt auf, wenn ich von einer kleineren Basis zu einer größeren Basis konvertiere. Dabei wird erläutert, wie Sie die gewünschte größere Basis in die kleinere Basis umwandeln müssen. Ein Beispiel wäre, von der Basis 4 zur Basis 6 zu wechseln. Sie müssen die Zahl 6 in die Basis 4 umwandeln, um die Zahl 12 zu erhalten. Sie tun dann genau das Gleiche wie beim Umwandeln von groß zu klein. Die Schwierigkeit, die ich dabei habe, scheint zu sein, dass Sie wissen müssen, welche Zahl sich in der anderen Basis befindet. Ich müsste also wissen, was 6 in Basis 4 ist. Dies ist ein großes Problem in meinem Kopf, da ich dann einen Tisch bräuchte. Kennt jemand einen Weg, dies auf eine bessere Art und Weise zu tun.
Ich dachte, eine Basiskonvertierung würde helfen, aber ich kann diese Arbeit nicht finden. Und von der Site aus, die ich gefunden habe, scheint es Ihnen zu ermöglichen, von Basis zu Basis zu konvertieren, ohne die Basis 10 zu durchlaufen, aber Sie müssen zuerst wissen, wie Sie die erste Zahl von Basis zu Basis konvertieren. Das macht es irgendwie sinnlos.
Kommentatoren sagen, ich muss in der Lage sein, einen Buchstaben in eine Zahl umzuwandeln. Wenn ja, weiß ich das schon. Das ist jedoch nicht mein Problem. Mein Problem ist, um eine große Basis in eine kleine Basis umzuwandeln, muss ich zuerst die Basisnummer, die ich habe, in die gewünschte Basisnummer umwandeln. Auf diese Weise kann ich den Zweck nicht erfüllen, da ich mein Problem bereits gelöst habe, wenn ich in der Lage bin, diese Basen in andere Basen umzuwandeln.
Bearbeiten: Ich habe herausgefunden, wie man von Basen kleiner oder gleich 10 in andere Basen kleiner oder gleich 10 konvertiert. Ich kann auch von einer Basis größer als 10 zu jeder Basis gehen, die 10 oder weniger ist. Das Problem tritt auf, wenn Sie von einer Basis größer als 10 zu einer anderen Basis größer als 10 konvertieren. Oder wenn Sie von einer Basis kleiner als 10 zu einer Basis größer als 10 wechseln auf Code angewendet.
string
und ein zurückgibtint
), und einen Algorithmus, der eine Zahl nimmt und ihre Darstellung zurückgibt in einer bestimmten Basis.Antworten:
Dies scheint mir eine sehr grundlegende Frage zu sein, entschuldigen Sie mich, wenn ich Sie ein wenig belehre. Der wichtigste Punkt, den Sie hier lernen müssen, ist, dass eine Zahl nicht ihre Stellendarstellung ist . Eine Zahl ist ein abstraktes mathematisches Objekt, während ihre Stellendarstellung eine konkrete Sache ist, nämlich eine Folge von Symbolen auf einem Papier (oder eine Folge von Bits im Computerspeicher oder eine Folge von Tönen, die Sie bei der Übermittlung einer Zahl erzeugen). Was Sie ist verwirrt , ist die Tatsache , dass Sie nie sehen eine Zahl , sondern immer Ziffernfolge abweichen. So Sie am Ende denken , dass die Zahl ist die Darstellung.
Daher lautet die richtige Frage nicht "Wie konvertiere ich von einer Basis in eine andere", sondern "Wie finde ich heraus, welche Zahl durch eine bestimmte Ziffernfolge dargestellt wird" und "Wie finde ich die Ziffernrepräsentation von a gegebene Nummer ".
Lassen Sie uns also zwei Funktionen in Python erzeugen, eine zum Umwandeln einer Ziffernrepräsentation in eine Zahl und eine andere zum Umkehren. Hinweis: Wenn wir die Funktion Python ausführen, wird auf dem Bildschirm natürlich die Nummer ausgegeben, die in Basis 10 gespeichert wurde. Dies bedeutet jedoch nicht , dass der Computer die Nummern in Basis 10 beibehält (dies ist nicht der Fall ). Es ist unerheblich, wie der Computer die Zahlen darstellt.
Lassen Sie uns diese testen:
Mit Konvertierungsfunktionen ausgestattet, ist Ihr Problem leicht zu lösen:
Ein Test:
Hinweis: Wir haben die Darstellung der Basis 10 nicht durchlaufen! Wir haben die Darstellung der Basis in die Zahl und dann die Zahl in die Basis c konvertiert . Die Zahl war nicht in jeder Darstellung. (Eigentlich war es so, der Computer musste es irgendwie darstellen, und es stellte es mit elektrischen Signalen und funky Sachen dar, die in Chips vorkommen, aber sicher waren das keine Nullen und Einsen.)b c
quelle
fromDigits
die Zahl zur Basis 10 zurückgegeben wird.Ich denke, der beste Weg, dies zu verstehen, ist die Diskussion mit einem Außerirdischen (zumindest als Analogie).
Definition ist eine Zahl in der Basis bx b bedeutet, dass eine Ziffernfolge < b ist .x <b
Beispiele Die Ziffernfolge 10010011011 ist eine Zahl in Basis 2, die Zeichenfolge 68416841531 ist eine Zahl in Basis 10, BADCAFE ist eine Zahl in Basis 16.
Angenommen, ich bin auf dem Planeten QUUX aufgewachsen, auf dem jedem beigebracht wird, ein Leben lang in zu arbeiten , und ich treffe dich, der es gewohnt ist, b zu gründen . Also zeigst du mir eine Nummer und was mache ich? Ich brauche einen Weg, um es zu interpretieren:q b
Definition Ich kann eine Zahl in der Basis b (Anmerkung: b ist eine Zahl in der Basis q ) durch die folgende Formel interpretierenb b q
Dabei bezeichnet die leere Zeichenfolge und ˉ s d eine Zeichenfolge, die mit der Ziffer d endet . Siehe meinen Beweis, dass der Zusatz eine Einführung in diese Notation gibt.ϵ s¯d d
Also, was ist hier passiert? Sie haben mir eine Zahl in Basis und ich habe sie in Basis q interpretiert, ohne irgendeine seltsame Philosophie darüber, was Zahlen wirklich sind.b q
Taste Der Schlüssel dazu ist, dass das und das + I Funktionen sind, die auf Basis- q- Zahlen arbeiten. Hierbei handelt es sich um einfache Algorithmen, die rekursiv auf Basis von q- Zahlen (Ziffernfolgen) definiert werden.× + q q
Dies mag etwas abstrakt erscheinen, da ich durchgehend Variablen anstelle von tatsächlichen Zahlen verwendet habe. Nehmen wir also an, Sie sind eine Kreatur der Basis 13 (mit den Symbolen ) und ich bin es gewohnt, mit den Symbolen α β γ δ ρ ζ ξ die Basis 7 zu verwenden (was viel sinnvoller ist) .0123456789XYZ αβγδρζξ
Also habe ich dein Alphabet gesehen und es folgendermaßen tabelliert:
Quux-Multiplikationstabelle
so to findβζ×βξ I do:
so I've got this far
Now I need to perform the addition using the algorithm which was mentioned before:
so
and continuing this way I get
In summary: If I have my own conception of number in terms of baseq strings of digits, then I have way to interpret your numbers from base b into my own system, based on the fundamental arithmetic operations - which operate natively in base q .
quelle
This is just a refactoring (Python 3) of Andrej's code. In Andrej's code numbers are represented through a list of digits (scalars), while in the following code numbers are represented through a list of symbols taken from a custom string:
To perform a conversion from value to representation in a custom base:
To perform a conversion from representation (in a custom base) to value:
To perform a base conversion from one custome base to another:
quelle
Die grundlegende Funktionsweise der Basiskonvertierung ist die
toDigits()
Funktionsweise von @AndrejBauer answer. Um dies zu erreichen, muss jedoch keine Zahl in der internen Darstellung der Zahlen erstellt werden. Dies ist im Grunde eine Konvertierung von und zur Basis-2-Darstellung. Sie können die erforderlichen Operationen in der ursprünglichen Basisdarstellung ausführen.Der erste Schritt besteht also darin, eine sich wiederholende Modulo-Divisionsoperation durchzuführen
Da es sich bei der internen Darstellung um Ziffern handelt, muss eine spezielle Funktion zum Testen von Null erstellt werden
Irgendwann muss man die Operation modulo_div ausführen, die eigentlich die Standardeinteilung nach Zielbasis ist, wie wir in der Schule gelernt haben.
Nur eine Testüberprüfung, um sicherzustellen, dass der Code korrekt ist:
quelle
Ich kenne eine einfache Möglichkeit, eine Basiskonvertierung durchzuführen, für die kein Computerprogramm erforderlich ist. Sie definieren eine Möglichkeit, von einer beliebigen Basis zu Basis 2 und umgekehrt zu konvertieren und dann von einer Basis zu einer anderen Basis zu konvertieren, indem Sie zuerst von der ersten Basis zu Basis 2 konvertieren und dann von Basis 2 zu der anderen Basis konvertieren. 2 ist so einfach in jeder Basis zu multiplizieren oder zu dividieren.
Um von einer Basis zu einer Basis 2 zu konvertieren, müssen Sie nur erkennen, dass für jede Zahl, wenn Sie die Notation der Basis 2 verwenden und bei 0 beginnen, und dann für jede Ziffer in der Reihenfolge von links nach rechts das Doppelte, wenn diese Ziffer Null und ist Wenn diese Ziffer gleich 1 ist, erhalten Sie diese Zahl. Wenn Sie nun diese Zahl in einer beliebigen Basis angeben, können Sie sie durch 2 teilen, um einen Quotienten und einen Rest zu erhalten. Wenn der Rest 1 ist, ist die letzte Binärziffer 1 und wenn der Rest 0 ist, ist die letzte Binärziffer 0. Teilen Sie erneut durch 2. Wenn der Rest 1 ist, ist die vorletzte Ziffer 1 und wenn der Rest 0 ist, ist die vorletzte Ziffer 0 und so weiter, bis Sie einen Quotienten von 0 erhalten.
Um von der Basis 2 zu einer beliebigen Basis zu konvertieren, müssen Sie nur in dieser Basis beginnen und mit 0 beginnen. Wenn diese Ziffer 0 ist, verdoppeln Sie für jede von links nach rechts gehende Binärziffer die Zahl in dieser Basis und addieren dann 1 dazu Basis, wenn diese Ziffer 1 ist.
quelle
2 is so easy to multiply or divide by in any base.
Ich sehe das nicht für ungerade Basen, die mehr als eins aus jeder Potenz von zwei sind (11 und 13, um damit zu beginnen).Sie können von Base n zu Base 10 konvertieren, ohne eine Konvertierung in eine Zwischenbase vorzunehmen.
Um beispielsweise von Basis n zu Basis 9 zu konvertieren, verwenden Sie den Algorithmus für die Konvertierung zu Basis 10 und ersetzen "10" durch "9". Das gleiche gilt für jede andere Basis.
quelle