IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Pascal Discussion :

Conversion BASE 16 à BASE 2


Sujet :

Pascal

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 89
    Points : 53
    Points
    53
    Par défaut Conversion BASE 16 à BASE 2
    Salut!
    Pour faire la conversion d'un nombre hexadecimal en binaire comment procède-t-on ?
    Écrire une procédure dont le temps de création dépend essentiellement de ma vitesse de frappe au clavier n'a pas le moindre intérêt !
    --- droggo.

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Lai,

    Changer de base est une opération assez simple, en voici une explication basique que je pense être assez claire.

    Avant de te lancer dans l'encodage, fais quelques conversions "à la main" pour bien assimiler le principe, et le programme devrait s'écrire presque tout seul

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    Calcul dans différentes bases
    
    Conventions
    
    Dans tout ce document, on va utiliser les notations suivantes:
    
    Le symbole ^ signifie 'élever à la puissance'
    par exemple 10^3 signifie 'élever 10 à la puissance 3' c'est à dire 10*10*10 = 1000
    
    Un nombre suivi par
    #B est écrit en base 2  (B pour binaire)
    #H est écrit en base 16 (H pour Hexadécimal)
    sans précision, il est écrit en base 10
    
    Le symbole * signifie 'multiplier'
    
    Dans les calculs, pour les divisions :
      Q signifie Quotient
      R signifie Reste
    
    Rappel : Tout nombre élevé à la puissance 0 (zéro) vaut 1
    (10^0 = 2^0 = 16^0 = 1)
    
    
    
    Quand nous écrivons un nombre, par exemple 573, cela signifie qu'il est égal à la somme:
    
      3 * 10^0  = 3*1    =    3
    + 7 * 10^1  = 7*10   =   70
    + 5 * 10^2  = 5*100  =  500
                           -----
                            573
                            
     
    On peut transcrire cela dans une autre base, par exemple en base 2
    
    On ne disposera alors que de 2 symboles, 0 et 1.
    Les chiffres en partant de la DROITE signifieront :
    0 ou 1 * 2^0
             2^1
             2^2
             2^3
             etc...
             
    Soit le nombre 1000111101#B, calculons sa valeur en base 10
    
      1 * 2^0  = 1
    + 0 * 2^1  = 0
    + 1 * 2^2  = 4
    + 1 * 2^3  = 8
    + 1 * 2^4  = 16
    + 1 * 2^5  = 32
    + 0 * 2^6  = 0
    + 0 * 2^7  = 0
    + 0 * 2^8  = 0
    + 1 * 2^9  = 512
                -----
                 573
                 
    On peut utiliser une autre base, 16.
    Il nous faut alors 16 symboles pour représenter les différents 'chiffres'.
    Par convention, on a choisi d'utiliser 0 à 9, puis A à F
    
    A vaut donc 10 (décimal)
    B = 11
    C = 12
    D = 13
    E = 14
    F = 15
    
    Avec le même principe que pour la base 2, voyons le nombre 23D#H
    
      D * 16^0 =  13
    + 3 * 16^1 =  48
    + 2 * 16^2 = 512
                -----
                 573
                 
    Le passage d'une base quelconque en base 10 est donc très simple.
    
    
    
    
    Voyons maintenant comment passer de la base 10 à une autre, exemple en base 16.
    
    La technique suivante permet de trouver les chiffres successifs en partant de la DROITE.
    
    soit le nombre 573.
    Divisons le par la base destination, soit 16
    573 / 16 = 35(Q) + 13(R)
      le reste = 13 = D#H est le premier chiffre à droite de la valeur cherchée
      
    répétons le calcul avec le quotient du calcul précédent (35)
    35 / 16 = 2(Q) + 3(R)
      le reste = 3 = 3#H est le deuxième chiffre en partant de la droite
      
    et encore une fois :
    2 / 16 = 0(Q) + 2(R)
      le reste = 2 = 2#H est le troisième chiffre en partant de la droite
      
    Comme le quotient = 0, on peut arrêter.
    
    Le nombre 573 s'écrit donc 23D#H
    
    En supprimant les commentaires, on obtient une disposition claire:
               
              (Q)   (R)   (R en base 16)
    573 / 16 = 35 + 13      D
     35 / 16 =  2 +  3      3
      2 / 16 =  0 +  2      2
      
      On lit les restes de bas en haut = 23D#H
      
      
    Refaisons le calcul pour écrire 573 en base 2
    
              (Q)    (R)
    573 / 2 = 286   + 1
    286 / 2 = 143   + 0
    143 / 2 =  71   + 1
     71 / 2 =  35   + 1
     35 / 2 =  17   + 1
     17 / 2 =   8   + 1
      8 / 2 =   4   + 0
      4 / 2 =   2   + 0
      2 / 2 =   1   + 0
      1 / 2 =   0   + 1
      
      terminé puisque le quotient = 0
      
      et donc en lisant les restes de bas en haut, la valeur est 1000111101#B
      
    
    Voilà, j'espère que c'est assez clair.
    N'hésite pas à poser des questions
    Si les cons volaient, il ferait nuit à midi.

  3. #3
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 89
    Points : 53
    Points
    53
    Par défaut
    Merci j'ai compris, tu as certainement selectionné l'une des explications les plus claires.
    J'espère avoir assimilé parce que je ne suis pas très en forme. Demain j'ai un contrôle dessus.
    @+
    Écrire une procédure dont le temps de création dépend essentiellement de ma vitesse de frappe au clavier n'a pas le moindre intérêt !
    --- droggo.

  4. #4
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Hi,

    Bonne chance
    Si les cons volaient, il ferait nuit à midi.

Discussions similaires

  1. Conversion base 2 base 10
    Par jcaspar dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 23/01/2007, 19h24
  2. Conversion base 16 => base 10
    Par perchman dans le forum Général Python
    Réponses: 2
    Dernier message: 22/01/2007, 19h07
  3. Conversion d'une base à une autre
    Par nouly dans le forum Assembleur
    Réponses: 5
    Dernier message: 05/02/2006, 18h14
  4. [datapump] probleme de conversion d'une base paradox
    Par plante20100 dans le forum Bases de données
    Réponses: 4
    Dernier message: 04/11/2005, 18h39
  5. Réponses: 2
    Dernier message: 05/09/2005, 16h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo