Conversion de la base 10 vers la base 16

Résolu
Bonjour,
Comment convertir par exemple le nombre (27,189520) de labase 10 vers la base 16.
Merci de me donner la méthode, surtout pour la conversion de la partie fractionnaire ...
L'algorithme je vais pouvoir le faire une fois la méthode comprise.
En vous remerciant d'avance pour votre aide ...

wChris79

5 réponses

  1. Salut pidad, pour etre plus clair

    Pour passer de la base dix à une autre on fait une division entière par l'autre base :

    27: 16 on trouve 1 et il reste 11 --> donc B est le chiffre de rang 0
    1: 16 on trouve 0 et reste 1 --> donc 1 est le chiffre de rang 1
    on trouve donc 1B

    27,189520 a 6 chiffre après la virgule donc je multiple 27.189520 par 16^6 et je trouve 456 164 450

    456 164 450 : 16 on trouve 28 510 278 et reste 2 --> donc 2 est le chiffre de rang 0
    28 510 278 : 16 on trouve 1 781 892 et reste 6 --> donc 6 est le chiffre de rang 2
    1 781 892 : 16 on trouve 111 368 et reste 4 --> donc 4 est le chiffre de rang 3
    111 368 : 16 on trouve 6 960 et reste 8 --> donc 8 est le chiffre de rang 4
    6 960 : 16 on trouve 435 et reste 0 --> donc 0 est le chiffre de rang 5
    435 : 16 on trouve 27 et reste 3 --> donc 3 est le chiffre de rang 6
    27 : 16 on trouve 1 et reste 11 --> donc B est le chiffre de rang 7
    1 : 16 on trouve 0 et reste 1 --> donc 1 est le chiffre de rang 8

    ce qui donne 1B308462 et je décale la virgule de 6 cases ce qui donne 1B,308462
    voila
    1. Modérateur
      Juste une précision : ce n'est pas parce que X a N chiffres après la virgule qu'on multiple X par 16^N, mais plutôt parce que X*16^N est entier lorsque X*16^(N-1) ne l'était pas.
      Si je prends 0.125 par exemple, il y a 3 chiffres après la virgule, mais multiplier 1 fois par 16 suffit.
    2. 0.125 a 3 chiffre après la virgule donc je multiple par 16^3 ce qui donne 512. donc pas de problème, au moins on est sur que ce sera bon sans essayer toutes les puissances de 16 mais c'est vrai que dans ce cas là ca revien au même
    3. Modérateur
      Lorsqu'on fait de l'informatique on essaye quand même de limiter au maximum les calculs.
      Exemple : 0.00390625. Avec 8 chiffres on multiplie par 16^8 et on fait la conversion de 16 777 216 alors qu'en multipliant par 16^2 seulement on aurait juste à faire la conversion de 1.
      Effectivement cela revient mathématiquement au même, mais le premier donne 0.01000000 et le deuxième 0.01, faire des calculs supplémentaires pour avoir plein de 0 inutiles c'est stupide...
    4. merci ton commentaire m'a été très utile
  2. Modérateur
    Remarque : il y a certaines valeurs avec un nombre fini de chiffrs après la virgule en base 10 qui ont un nombre infini de chiffres en base 16 !

    Exemple simple : 0.1 --> 0.19999999999...
    1. mais sincérement j'ai pas bien compris la méthode ??? est ce que vous pouver m'expliquer mieu
      1. Modérateur
        La partie fractionnaire c'est le même principe que la partie entière :

        27,18952  
        = 2.10^1 + 7.10^0 + 1.10^(-1) + 8.10^(-2) + 9.10^(-3) + 5.10^(-4) + 2.10^(-5)  
        = 1.16^1 + 11.16^0 + 3.16^(-1) + 0.16^(-2) + 8.16^(-3) + 4.16^(-4) + 6.16^(-5) + 2.16^(-6)

        Une manière d'arriver au résultat est de multiplier par une puissance de 16 pour enlever la partie fractionnaire en base 10, et de la remettre une fois la conversion effectuée :
        27.18952 = 27.18952 * 16^6 * 16^(-6) = 456 164 450 * 16^(-6)
        Si tu passes 456 164 450 en base 16 --> 1B308462, tu n'as alors plus qu'à décaler la virgule de 6 crans d'où 27.18952 --> 1B,308462
        La confiance n'exclut pas le contrôle
        1. Merci pour vos explications. J'avais un doute sur la manière de convertir la partie décimale... Maintenant je vais savoir faire cette opération. Encore merci...

          wChris79