Je me suis penché sur le calcul derrière la conversion d'une base à une autre. Il s’agit plus de confirmer mes résultats que d’autre chose. J'ai trouvé ce qui semble être ma réponse sur mathforum.org mais je ne suis toujours pas sûr d'avoir bien compris. J'ai la conversion d'une base plus grande à une base plus petite, d'accord parce que c'est simplement prendre le premier chiffre à multiplier par la base que vous voulez ajouter au prochain chiffre à répéter. Mon problème vient de la conversion d'une base plus petite en une base plus grande. Ce faisant, ils expliquent comment vous devez convertir la plus grande base que vous souhaitez en une plus petite. Par exemple, si vous passez de la base 4 à la base 6, vous devez convertir le nombre 6 en base 4 et en obtenir 12. Vous faites alors la même chose que lorsque vous convertissiez de grande à petite. La difficulté que j'ai avec ceci est qu'il semble que vous ayez besoin de savoir quel numéro est dans l'autre base. J'aurais donc besoin de savoir ce qui est 6 dans la base 4. Cela crée un gros problème dans mon esprit car il me faudrait alors un tableau. Est-ce que quelqu'un connaît un moyen de le faire d'une meilleure façon.
Je pensais qu'une conversion de base aiderait, mais je ne peux en trouver aucun qui fonctionne. Et sur le site, je trouve que cela semble vous permettre de convertir de base en base sans passer par la base 10, mais vous devez d’abord savoir comment convertir le premier nombre de base en base. Cela le rend un peu inutile.
Les commentateurs disent que je dois être capable de convertir une lettre en un nombre. Si c'est le cas, je le sais déjà. Ce n'est pas mon problème cependant. Mon problème est de convertir une grande base en une petite base. Je dois d’abord convertir le numéro de base que j'ai en un nombre de base que je veux. Ce faisant, je rejette le but parce que, si j’ai la capacité de convertir ces bases en d’autres bases, j'ai déjà résolu mon problème.
Edit: J'ai découvert comment convertir des bases inférieures ou égales à 10 en d'autres bases inférieures ou égales à 10. Je peux également passer d'une base supérieure à 10 à une base inférieure ou égale à 10. Le problème commence lors de la conversion d'une base supérieure à 10 en une autre base supérieure à 10. Ou du passage d'une base inférieure à 10 à une base supérieure à 10. Je n'ai pas besoin de code, j'ai juste besoin des bases mathématiques qui peuvent être derrière appliqué au code.
la source
string
et qui retourne unint
), et un algorithme qui prend un nombre et retourne sa représentation. dans une base donnée.Réponses:
Cela me semble une question très fondamentale, alors excusez-moi si je vous fais un peu la leçon. Le point le plus important à apprendre ici est qu’un nombre n’est pas sa représentation numérique . Un nombre est un objet mathématique abstrait, alors que sa représentation numérique est une chose concrète, à savoir une séquence de symboles sur un papier (ou une séquence de bits dans la mémoire de calcul, ou une séquence de sons que vous faites lorsque vous communiquez un nombre). Ce qui vous dérange, c'est que vous ne voyez jamais un chiffre mais toujours sa représentation numérique. Vous finissez donc par penser que le nombre est la représentation.
Par conséquent, la bonne question à poser n’est pas "comment convertir une base en une autre", mais "comment savoir quel numéro est représenté par une chaîne de chiffres donnée" et "comment trouver la représentation numérique d’un chiffre?". numéro donné ".
Alors produisons deux fonctions en Python, l’une pour convertir une représentation numérique en un nombre et l’autre pour faire le contraire. Remarque: lors de l'exécution de la fonction, Python imprimera bien sûr à l'écran le numéro obtenu en base 10. Cela ne signifie toutefois pas que l'ordinateur conserve les numéros en base 10 (ce n'est pas le cas). La façon dont l'ordinateur représente les nombres n'a aucune importance .
Laissez-nous tester ces:
Armé de fonctions de conversion, votre problème est résolu facilement:
Un examen:
Remarque: nous n'avons pas traversé la représentation en base 10! Nous avons converti la représentation base en nombre, puis le nombre en base c . Le nombre était pas dans une représentation. (En fait, l'ordinateur devait le représenter d'une manière ou d'une autre, et le représentait en utilisant des signaux électriques et des trucs géniaux qui se produisent dans les puces, mais ce ne sont certainement pas des 0 et des 1.)b c
la source
fromDigits
retourne le nombre en base 10.Je pense que la meilleure façon de comprendre cela est de discuter avec un étranger (au moins par analogie).
La définition est un nombre en base bx b signifie que est une chaîne de chiffres < b .x <b
Exemples La chaîne de chiffres 10010011011 est un nombre en base 2, la chaîne 68416841531 est un nombre en base 10, BADCAFE est un nombre en base 16.
Maintenant, supposons que j'ai grandi sur la planète QUUX où tout le monde apprend à travailler dans toute sa vie, et que je vous rencontre, vous qui avez l'habitude de baser b . Alors tu me montres un numéro et que dois-je faire? J'ai besoin d'un moyen de l'interpréter:q b
Définition Je peux interpréter un nombre en base (Remarque: b est un nombre en base q ) à l'aide de la formule suivanteb b q
où désigne la chaîne vide et ˉ s d une chaîne se terminant par le chiffre d . Voir ma preuve que l'addition ajoute pour une introduction à cette notation.ϵ s¯d d
Alors qu'est-ce qui s'est passé ici? Vous m'avez donné un chiffre en base et je l'ai interprété en base q sans aucune philosophie étrange sur ce que sont réellement les nombres.b q
Key La clé de ceci est que le et le + que j'ai sont des fonctions qui fonctionnent sur des nombres de base q . Ce sont des algorithmes simples définis récursivement sur des nombres de base q (chaînes de chiffres).× + q q
Cela peut sembler un peu abstrait puisque j'ai toujours utilisé des variables plutôt que des nombres réels. Alors supposons que vous êtes une créature de base 13 ( en utilisant des symboles ) et je suis habitué à la base 7 (qui est beaucoup plus sensible) en utilisant des symboles a ß gamma ô p Ç Ç .0123456789XYZ αβγδρζξ
J'ai donc vu votre alphabet et le tabulé ainsi:
Donc , je sais que vous travaillez dans la base , et je sais ce que le numéro 7 de base un chiffre que vous écrivez correspond à.βξ
Maintenant, si nous parlions de physique et que vous me parliez de constantes fondamentales (disons) , je dois donc interpréter ceci:60Z8
Je commence par la multiplication des mais est de qualité des choses de l' école pour moi, je me souviens:βζ×βξ
Table de multiplication Quux
donc j'ai jusqu'ici
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 .
la source
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:
la source
Fundamental operation of base convertion is the
toDigits()
operation of @AndrejBauer answer. However, to make it there is no need to create a number in the internal representation of the numbers, which is basically a conversion from and to base 2 representation. You can make the needed operations in the original base representation.So the first step is to do repetitive modulo division operation
As the internal representation is digits, one has to make a specilaised function for testing zero
Eventually one has to make the modulo_div operation which is actually the standard division by destination base as we learnt at school.
just a test check to verify the code is correct:
la source
I know an easy way to do base conversion that doesn't require a computer program. It's by defining a way to convert from any base to base 2 and vice versa and then coverting from one base to another base by first converting from the first base to base 2 then converting from base 2 to the other base. 2 is so easy to multiply or divide by in any base.
To convert from any base to base 2, all you have to do is recognize that for any number, if you take its base 2 notation and start from 0 and then for each digit in order from left to right double if that digit is zero and double than add 1 if that digit is 1, you get to that number itself. Now given that number in any base, you can divide by 2 in that base to get a quotient and remainder. If the remainder is 1, the last binary digit is 1 and if the remainder is 0, the last binary digit is 0. Divide by 2 again. If the remainder is 1, the second last digit is 1 and if the remainder is 0, the second last digit is 0 and so on until you get a quotient of 0.
To convert from base 2 to any base, all you have to do is in that base, start from 0, then for each binary digit going from left to right, double in that base if that digit is 0 and double then add 1 in that base if that digit is 1.
la source
2 is so easy to multiply or divide by in any base.
I don't see that for odd bases that are more than one from any power of two (11 and 13, to start with).You can convert from base n to base 10 without any conversion to some intermediate base.
To convert from base n to base 9, for example, you take the algorithm for conversion to base 10, and replace “10” with “9”. Same for any other base.
la source