Les systèmes de numération

Système positionnel et bases

Les systèmes de numération ne font pas partie des programmes du secondaire et rarement des filières du supérieur. En revanche, ils figurent au concours de professeur des écoles.

 

Le système positionnel

Il existe plusieurs logiques pour écrire un nombre. Dans notre culture occidentale nous en connaissons deux.

  • Le système additif. Le plus connu est celui des chiffres romains. Exemple, le nombre 66 s’écrit LXVI. Ainsi L représente 50, puis on ajoute 10 (X) puis 5 (V) puis 1 (I).

    Un tel système ne permet que de noter les nombres, pas de calculer. Posez une banale addition de deux nombres écrits en numération romaine. Belle prise de tête !

    Ci-dessous, montre avec chiffres romains du dix-septième siècle (Petit Palais).



  • Le système positionnel. C’est celui que nous utilisons au quotidien, avec des chiffres dits arabes mais qui sont nés en Inde. Toutefois, ce sont bien les Arabes qui les ont importés en Espagne au dixième siècle.

    C’est surtout grâce à Fibonacci que ce type de numérotation pénétra en Europe. Dans son célèbre ouvrage Liber abaci dont le premier manuscrit remonte à 1202, il exposa de nombreux exemples pratiques (dont un qui donna naissance à la fameuse suite de Fibonacci). Il détailla les algorithmes permettant de résoudre les opérations de base ainsi que la règle de trois, apportant aux commerçants un outil inestimable.

    En effet, l’avantage du système positionnel est énorme puisqu’il permet de poser des additions, des multiplications, etc. Sans oublier l’existence du chiffre (et nombre) zéro, inconnu des Romains. Bref, les maths lui doivent tout. Et si vous pensiez que le Moyen Âge a été une très longue période au cours de laquelle il ne s’est pas passé grand-chose, vous avez tout faux.

 

Bases usuelles

Le système que nous connaissons est en base 10. Il existe dix chiffres. Les dix premiers nombres entiers s’écrivent avec un seul chiffre, puis deux à partir de 10, puis trois à partir de \(10^2\) et ainsi de suite. Il semblerait qu’à l’origine le 10 ait été choisi parce qu’il est commode de compter avec ses dix doigts.

N’importe quel nombre peut servir de base. Par exemple, en base 3, seuls les chiffres 0, 1 et 2 existent.

Comptons : 0, 1, 2, 10, 11, 12, 20, 21, 22, 100, 101…

101 correspond à 10 en système décimal. Pour montrer que ce nombre est écrit en base 3, on le note \(\overline{101}^3.\)

De nombreuses bases ont existé au cours de l’Histoire. Par exemple, les Mayas comptaient en base 20. Outre le système décimal, quelques autres font partie de notre vie quotidienne.

Le système sexagésimal (base 60). Nous l’employons pour mesurer le temps puisque 60 secondes égalent une minute et 60 minutes égalent une heure. Certes, il n’y a pas soixante chiffres différents et le système décimal est « imbriqué » dans le sexagésimal. Sur une autre échelle de temps, c’est le système duodécimal (base 12) qui s’applique (heures et mois).

Le système binaire (base 2) ne comporte que des 0 et des 1. Un ordinateur ne comprend que le binaire. Le 1 correspond à une tension électrique et le zéro à une absence de tension. Avant la miniaturisation des transistors, et même avant la « domestication » de l’électricité dans le cas des métiers à tisser, on utilisait des cartes perforées. Un trou correspondait à 1 et une absence de trou à zéro.

Le système hexadécimal (base 16) est utilisé en informatique, notamment pour déterminer les codes couleurs ainsi que les adresses MAC et IPv6. Les seize « chiffres » sont 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E et F. Pour en savoir plus sur les codes couleurs HTML voir le système RVB et pour vous entraîner à une conversion rendez-vous sur le deuxième exercice d'encodage des nombres.

 

Décomposition canonique

Nous pouvons décomposer un nombre écrit dans une base \(b\) en faisant apparaître les puissances de \(b.\)

Exemple 1 : en base 10, le nombre 851 s’écrit \(8 \times 10^2 + 5 \times 10^1 + 1 \times 10^0.\) Rappelons qu’un nombre élevé à la puissance nulle est égal à 1.

Exemple 2 : reprenons 851 mais décomposons-le en puissances de 7.

Nous savons que \(7^2 = 49\) et \(7^3 = 343.\) Comme \(7^4\) est supérieur à 851, nous n’en aurons pas besoin.

Commençons par la division euclidienne de 851 par 343. Le résultat est 2, avec un reste de 165. Divisons 165 par 49. Nous obtenons 3 avec un reste de 18, soit \(7 \times 2 + 4.\)

Par conséquent, \(851 = 2 \times 7^3 + 3 \times 7^2 + 2 \times 7^1 + 4 \times 7^0\)

 

Conversion en base 10

Le principe de la décomposition canonique vous laisse deviner les manipulations nécessaires pour changer de base.

Soit le nombre \(\overline{101}^3.\) En base 10, il est égal à \(1 \times 3^2 + 0 \times 3^1 + 1 \times 3^0\) donc 10. Ce n’est pas très difficile…

 

Conversion dans une autre base

Nous devons faire l’opération inverse. C’est plus long puisqu’il faut passer par la décomposition canonique.

Nous avons vu que \(851 = 2 \times 7^3 + 3 \times 7^2 + 2 \times 7^1 + 4 \times 7^0.\)

En base 7, ce nombre est donc composé de quatre chiffres. Ce sont ceux qui multiplient les puissances de 7. D’abord 2, puis 3, puis 2 et enfin 4. Il est évident qu’un nombre écrit en base 7 ne comporte ni 7, ni 8 ni 9.

\(851 = \overline{2324}^7\)

Pour préparer le concours de professeur des écoles, ces techniques sont illustrées avec des bâtons puisque les élèves de l’école élémentaire ne connaissent pas les puissances. Ainsi, comment traduire 10 en base 3 ? On trace dix bâtons et on les regroupe par trois. Ensuite, on regarde si des groupes peuvent eux aussi être agrégés par 3. En l’occurrence, la réponse est oui. Il y a donc 1 super groupe (premier chiffre), aucun groupe isolé (deuxième chiffre) et un bâton isolé (dernier chiffre). Soit \(\overline{101}^3.\)

 

Python

Le langage Python possède des fonctions intégrées pour jongler entre le binaire, le décimal et l’hexadécimal, voire des bases plus exotiques (jusqu'à la base 36).

Pour traduire un nombre binaire en décimal, faites-le précéder de 0b. Soit le nombre binaire 1101. À quel décimal est-il égal ?

print(0b1101)

La console affiche 13

Vous obtenez le même résultat avec la fonction int, en précisant la base. Le nombre est placé entre apostrophes car il est considéré comme une chaîne de caractères.

print(int('1101',2))

Essayons la base 3. Plus haut, nous avons vu que 101 en base 3 était égal à 10.

print(int('101',3))

On obtient bien 10.

Pour convertir un nombre base 10 en binaire, il existe une fonction bin. Exemple :

print(bin(13))

Réponse de Python : 0b1101 (chaîne de caractères).