Skip to content

Bases de numération

Fonctionnement du système décimal

Les différents chiffres constituant le nombre représentent les puissances de 10 successives :

6571 = 6 × 1000 + 5 × 100 + 7 × 10 + 1 = 6 × 103 + 5 × 102 + 7 × 101 + 1 × 100

On peut aussi retrouver cette décomposition, en faisant des divisions par 10 successives. A chaque étape, on récupère le quotient pour le diviser par 10, et on s'arrête lorsque le quotient est nul :

6571 ÷ 10 = 657 et il reste 1.
657 ÷ 10 = 65 et il reste 7.
65 ÷ 10 = 6 et il reste 5
6 ÷ 10 = 0 et il reste 6.

Les restes successifs pris en sens inverse redonnent le nombre de départ, soit 6571.

Numération octale (base 8)

On décide d’appliquer la méthode précédente des divisions successives en utilisant le nombre 8 comme diviseur. On reprend le même nombre : 6571.

6571 ÷ 8 = 821 et il reste 3.
821 ÷ 8 = 102 et il reste 5.
102 ÷ 8 = 12 et il reste 6.
12 ÷ 8 = 1 et il reste 4.
1 ÷ 8 = 0 et il reste 1.

Les restes pris à l’envers donnent le nombre : 14653, et on remarque que l’on a effectivement :

6571 = 1 × 84 + 4 × 83 + 6 × 82 + 5 × 81 + 3 × 80

Nous trouvons donc que le nombre décimal 6571 s’écrit 14653 en base 8. On note ceci sous la forme suivante : (6571)10 = (14653)8.

Remarque : le reste d’une division par 8 ne peut être qu’un nombre compris entre 0 et 7 inclus : 0, 1, 2, 3, 4, 5, 6 et 7. Cela veut donc dire qu’il ne faut que 8 symboles pour écrire un nombre en base 8.

Numération binaire (base 2)

On essaye maintenant d’écrire 6571 comme une somme de puissances de 2. On utilise donc la méthode des divisions successives avec le nombre 2 comme diviseur.

6571 ÷ 2 = 3285 et il reste 1.
3285 ÷ 2 = 1642 et il reste 1.
1642 ÷ 2 = 821 et il reste 0.
821 ÷ 2 = 410 et il reste 1.
410 ÷ 2 = 205 et il reste 0.
205 ÷ 2 = 102 et il reste 1.
102 ÷ 2 = 51 et il reste 0.
51 ÷ 2 = 25 et il reste 1.
25 ÷ 2 = 12 et il reste 1.
12 ÷ 2 = 6 et il reste 0.
6 ÷ 2 = 3 et il reste 0.
3 ÷ 2 = 1 et il reste 1.
1 ÷ 2 = 0 et il reste 1.

Les restes pris à l’envers donnent le nombre : 1100110101011, et on remarque que l’on a effectivement :

6571 = 1 × 212 + 1 × 211 + 0 × 210 + 0 × 29 + 1 × 28 + 1 × 27 + 0 × 26 + 1 × 25 + 0 × 24 + 1 × 23 + 0 × 22 + 1 × 21 + 1 × 20

Le nombre décimal 6571 s’écrit donc 1100110101011 en binaire. Comme précédemment, on s’aperçoit que la numération binaire ne comporte que 2 symboles, le reste d’une division par 2 ne pouvant être que 0 ou 1. Les « chiffres » binaires s’appellent des bits (binary digits). Le nombre étudié dans l’exemple comporte 13 bits.

Règles générales :

  • On peut décomposer n’importe quel nombre en utilisant n’importe quel nombre entier supérieur ou égal à 2 comme base de numération.
  • Si la base de numération utilisée est n, les nombres seront écrits grâce à n symboles (que l’on appelle « chiffres » par analogie avec le système décimal).
  • L’écriture d’un même nombre est d’autant plus compacte que la base de numération est élevée. Exemple : (6571)10 = (14653)8 = (1100110101011)2 : pour écrire le même nombre, il faut 4 chiffres en base 10, 5 chiffres en base 8, et 13 chiffres en base 2.

Dernier exemple : la numération hexadécimale (base 16)

Le problème est le suivant : pour écrire un nombre en base 16, il faut disposer de 16 symboles différents. Or nous ne disposons que de 10 chiffres, de 0 à 9. Pour avoir 16 symboles, on ajoute donc les six premières lettres de l’alphabet. Les « chiffres » hexadécimaux sont donc :

On reprend notre exemple (6571) avec des divisions successives par 16 :

6571 ÷ 16 = 410 et il reste 11.
410 ÷ 16 = 25 et il reste 10.
25 ÷ 16 = 1 et il reste 9.
1 ÷ 16 = 0 et il reste 1.

Les restes successifs pris en sens inverse sont : 1, 9, 10 et 11. 10 s’écrit « A » et 11 s’écrit « B » en base 16. Le nombre décimal 6571 s’écrit donc 19AB en base 16 : (6571)10 = (19AB)16.

On remarque qu’on a bien :

6571 = 1 × 163 + 9 × 162 + 10 × 161 + 11 × 160

Mais quel est l’intérêt de tout ça ?

Le système binaire est très utile pour coder les nombres à l’aide de signaux électriques : on peut par exemple choisir la convention suivante :

Le courant passe = 1 / Le courant ne passe pas = 0

Les ordinateurs utilisent donc le système binaire pour représenter les nombres. Le problème est que la base 2 n’est pas pratique pour les êtres humains : lorsque la valeur du nombre augmente, le nombre de bits croit très rapidement. Pour garder une écriture de taille raisonnable, il faut donc choisir une base plus grande que 2. Pour des raisons mathématiques, il est très pratique d’utiliser une base qui soit un multiple de 2, car cela rend les conversions plus simples. D’où l’intérêt des bases 8 et 16, qui permettent d’écrire de façon plus lisible les nombres binaires manipulés par les ordinateurs. De nos jours la base 8 n’est plus trop utilisée.

Exemple :

(1100101011111110)2 ⇒ 1100 1010 1111 1110 ⇒ C A F E ⇒ (CAFE)16.

Exercices :

  • Ecrire votre année de naissance dans les bases 2 et 16.
  • Quel est le plus grand nombre binaire que l’on puisse écrire avec 16 bits ? Ecrire ce nombre et le convertir dans les bases 8, 16 et 10.
  • Ecrire le nombre 6571 en base 5, puis en base 12 (en utilisant les chiffres de 0 à 9 puis les lettres A et B).

 

Extrait de « Les nombres, math un peu ma planète » de Jean Pézennec
Dessin de François Lachèze

 

Fiche méthode de changements de base à télécharger

Script Python permettant de réaliser des conversions d'une base "n" à une base "p" :

# Conversions de bases

def b2dec(chaine, base):
    """
    b2dec convertit un nombre écrit dans une base != 10 en base 10.
    le nombre à convertir est passé en premier argument sous forme d'une chaine
    la base de départ est passée en deuxième argument sous forme d'un entier
    """
    resultat = 0
    chaine = chaine.upper()                         # passage en majuscule pour simplifier le traitement
    for i in range(len(chaine)):
        chiffre = chaine[len(chaine) - 1 - i]       # on prend le i ème chiffre en partant de la droite sous la forme d'un caractère
        if (chiffre >= '0') and (chiffre <= '9'):   # si ce chiffre est compris entre '0' et '9', on le transforme en entier
            valeur = int(chiffre)
        elif (chiffre >= 'A') and (chiffre <= 'Z'): # si le chiffre est compris entre 'A' et 'Z', on trouve sa valeur en extrayant 55
            valeur = ord(chiffre) - 55              # à son code ASCII (de façon à ce que 'A' (de code 65) donne la valeur 10.
        resultat = resultat + valeur * (base ** i)
    return resultat

def dec2b(nombre, base):
    """
    dec2b convertit un nombre écrit en base 10 dans une base != 10.
    le nombre à convertir est passé en premier argument sous forme d'un entier
    la base d'arrivée est passée en deuxième argument sous forme d'un entier
    """
    resultat = ''
    while(nombre != 0):
        reste = nombre % base                       # on calcule le reste de la division du nombre de départ par la base
        if (reste <= 9):                            # si le reste est entre 0 et 9 (inclus), on le convertit en caractère
            reste = str(reste)
        else:
            reste = chr(reste + 55)                 # sinon on prend le caractère de code ASCII la valeur du reste + 55,
        resultat = reste + resultat                 # de façon à ce que 10 donne le caractère 'A' (de code ASCII 65)
        nombre = nombre // base                     # on stocke dans nombre la valeur du quotient de la division euclidienne précédente
    return resultat

def convert(chaine, b1, b2):
    """
    convert convertit un nombre écrit dans une base b1 en base b2.
    le nombre à convertir est passé en premier argument sous forme d'une chaine
    la base de départ est passée en deuxième argument sous forme d'un entier
    la base d'arrivée est passée en troisième argument sous forme d'un entier
    """
    return dec2b(b2dec(chaine, b1), b2)             # on convertit le nombre de la base b1 à la base 10, puis de la base 10 à la base b2

 

 

Insert math as
Block
Inline
Additional settings
Formula color
Text color
#333333
Type math using LaTeX
Preview
\({}\)
Nothing to preview
Insert