Numération

Retour


    De tout temps, l'homme a cherché à compter avec plus ou moins de réussite. Dès la préhistoire, on retrouve sur des os des entailles pouvant avoir servi à compter des animaux ou des objets. S'il est relativement simple de compter avec des traits jusqu'à 5, il devient plus difficile de compter au-delà. Imaginez le nombre 100 représenté avec des entailles, l'erreur est assurée... Les romains ont mis en place un système de numération basé sur des symboles littéraux. Cette numération très utile à cette époque présente de nos jours l'inconvénient majeur de ne pas pouvoir autoriser les opérations de base (addition, soustraction) ce qui est gênant. Essayez d'ajouter de tête MCDIV + CCLXXI. Problème n'est-ce pas ? La réponse est : MDCLXXV (1675).

    C'est vers l'an 750 en Inde, que les indiens ont mis en place la numération que nous utilisons aujourd'hui avec tous ses chiffres. Les Indiens les ont ensuite transmis aux Arabes qui les ont transmis aux Européens vers l'an 1200. Et ce n'est qu'environ trois siècles plus tard que les chiffres se généraliseront, un peu. C'est pour cette raison que l'on parle de chiffres arabes. Si les Arabes ne sont pas à l'origine des chiffres, ils sont par contre à l'origine des mathématiques. C'est l'astronome et mathématicien Al Khuwârizmî qui établira les fondements des règles du calcul algébrique.

    La numération fait appel à deux principes fondamentaux que l'on retrouvera dans toutes les bases de calcul.

    Le premier principe fondamental est le principe de position, on associe à un chiffre qui a une position dans un nombre une valeur parfaitement définie. Par exemple 1 signifie que l'on a une fois l'unité. Le même chiffre placé dans le nombre 1254 signifie qu'il y a une fois mille.

    Le deuxième principe fondamental est le principe du zéro. Le zéro matérialise une position où il y a absence d'éléments. Pour que le nombre 10 signifie dix, il faut placer le un sur la colonne des dizaines et matérialiser l'absence d'unité par un zéro. Le zéro donne son sens au nombre en positionnant le 1 dans la colonne des dizaines.

    Les bases de calcul sont nombreuses même si peu sont réellement utilisées. On peut citer un certain nombre de bases qui ont eu ou qui ont toujours une très grande importance :

- La base 2 ou base binaire très utilisée en A.I.I. est la base de la logique booléenne ou algèbre de Boole.

- la base 4 cette base a été l'objet de nombreuses polémiques et aurait pu devenir la base universelle.

- la base 5 est une base très intéressante qui permet facilement de compter jusqu'à 30 avec ses dix doigts. La première main comptant les unités et la deuxième comptant les cinquaines.

- la base 8 (base octale). Utilisée il y a un certain temps en informatique lorsque les machines utilisées étaient peu gourmande en puissance de bus.

- la base 10 (base décimale). Elle est considérée comme la base universelle. de ce fait nous l'utilisons presque tout le temps.

- la base 12 qui est une base religieuse établie sur les douze signes du zodiaque. Cette base a été utilisée principalement dans le commerce (c'est à cause de l'utilisation de cette base que l'on parle encore d'une douzaine d'œufs ou d'une douzaine d'huîtres, dans une journée il y a 24 heures divisées en deux fois douze heures, etc.)

- la base 16 (base hexadécimale). Cette base est très utilisée dans le monde de la micro-informatique et des automates. Elle permet de coder un mot (16 bits) sur 4 variables hexadécimales. Cette base fait intervenir tous les chiffres de la base 10 complétée par les 6 premières lettres de l'alphabet.

- la base 20 cette base a été construite à partir des dix doigts des mains et des pieds de l'homme. Cette base a été très utilisée et il en subsiste quelques traces dans notre numération actuelle (quatre-vingts, quatre-vingt-dix).

- la base 60 cette base a été construite sur des concepts religieux, d'un maniement complexe, elle est toujours utilisée de nos jours. (Sur un cercle, il y a 360° qui sont divisés chacun en 60 minutes divisées chacune en 60 secondes. Il en va de même pour chacune des heures de la journée qui sont divisées chacune en 60 minutes, elles-mêmes divisées en 60 secondes. La division des secondes en soixantième de seconde n'ayant pas de sens la précision se fait en centième de seconde. Il subsiste quelques traces de cette base dans notre numération actuelle (soixante, soixante-dix).

    En informatique industrielle, chaque signal n'ayant que deux états possibles, état 0 et état 1, les bases que nous seront amenés à utiliser pour coder des signaux seront des multiples de la base binaire (Binaire, Octale et Hexadécimale). L'objet de cette étude portera plus particulièrement sur les problèmes de changement de base (10) en base (2) ou (16) ou l'inverse, ainsi que le passage de base (10) en base (16).

Codage en base 2 ® 0 ; 1.

Codage en base 8 ® 0 ; ...; 7.

Codage en base 10 ® 0;...; 9.

Codage en base 16 ® 0; ...; F.

Bit : Contraction des mots anglais BInary digiT.

    C'est l'unité élémentaire d'information qui ne peut prendre qu'une des deux valeurs suivantes : 0 ou 1. Dans les micro-ordinateurs, les bits sont groupés par huit pour former des mots. Un mot de huit bits est un octet ou en Anglais un byte. Quelquefois, on ajoute à un groupe de bits un bit supplémentaire qui sera un bit de contrôle (en anglais : check bit). Si le bit de contrôle forme avec le nombre total de bits un chiffre impair, on parlera de bit d'imparité (en anglais : odd parity), s'il forme un nombre pair, on parlera de bit de parité (en anglais : parity bit). Les microprocesseurs qui utilisent des mots de 8, 16, 32 bits sont appelés microprocesseurs 8 bits, 16 bits, etc.

 

Octet : C'est un ensemble de huit bits. On exprime généralement la capacité des mémoires en Kilo-octets (Ko), un Ko vaut 1024 octets (210).

    Les micro-ordinateurs ont une capacité de mémoire disponible (RAM : Read Only Memory) égale ou supérieure à 512 Ko. Sur les micro-ordinateurs équipés de Pentium, il est fréquent de 258 Mo de mémoire vive.

Les disquettes ont une capacité qui varie, selon les modèles, de 180 Ko à 1.44 Mo.

Les disques durs peuvent stocker plusieurs dizaines, voire plusieurs Giga-octets de mémoire de masse. On exprime généralement la capacité des mémoires de masse en Mega-octets (Mo) et giga-octets (Go). Un Mo vaut 1000 Ko. Un Giga-octet vaut 1000 Mo.

 

Byte : (Français : octet).

Attention donc à ne pas confondre un bit et un byte, un byte c'est 8 bits.

 

Mot : c'est un ensemble de 2 octets, il est donc codé sur 16 bits.

Décimal

Binaire

Octal

Héxadécimal

0

0000

0

0

1

0001

1

1

2

0010

2

2

3

0011

3

3

4

0100

4

4

5

0101

5

5

6

0110

6

6

7

0111

7

7

8

1000

10

8

9

1001

11

9

10

1010

12

A

11

1011

13

B

12

1100

14

C

13

1101

15

D

14

1110

16

E

15

1111

17

F

On associe à chaque bit un poids. Ce poids est fonction de la position du bit dans l'octet.

LSB :(Least significant Bit) bit de poids faible, c'est le bit qui a le moins de signification dans un octet. Par convention, c'est le bit le plus à droite dans l'écriture d'un mot. Exactement comme dans le nombre 105, c'est le chiffre le plus à droite qui à le moins de poids, la valeur la plus faible.

MSB :(Most significant bit) bit de poids fort, c'est le bit qui a le plus de signification dans un octet. Par convention, c'est le bit le plus à gauche dans l'écriture d'un mot. Exactement comme dans le nombre 105, c'est le chiffre le plus à gauche qui à le plus de poids, la valeur la plus forte.

Explication par l'exemple : l'octet 1010 1101 représente le nombre 173 en base 10.

  1. Décomposition :

  1. Méthode de la soustraction (méthode un peu lourde):

Dans 173, y-a-t-il 128 ? oui 173 -128 = 45 

Dans 45, y-a-t-il 64 ? non, il reste toujours 45

Dans 45, y-a-t-il 32 ? oui 45 - 32 = 13

Dans 13, y-a-t-il 16 ? non, il reste toujours 13 

Dans 13, y-a-t-il 8 ? oui 13 - 8 = 5 

Dans 5, y-a-t-il 4 ? oui 5 - 4 = 

Dans 1, y-a-t-il 2 ? non, il reste toujours 1

Dans 1, y-a-t-il 1 ? oui 1 - 1 = 0 

® 1 (MSB) 

®

® 1

® 0

® 1

®

® 0

® 1 (LSB)

  1. Méthode de la division (méthode élégante) :

    Le principe de la méthode par divisions successives consiste à réaliser une suite de divisions par 2. Chaque quotient devient à son tour dividende jusqu'à obtenir un quotient égal à 1. Les restes de ces divisions sont toujours 0 ou 1 puisque les nombres à diviser sont soit pairs soit impairs. Le dernier quotient obtenu (1) est le MSB. Il faut donc remonter les restes successifs du MSB au LSB pour obtenir la valeur binaire d'un nombre entier.

Le principe de base est le même que pour le codage binaire. Mais dans ce cas, la base de comptage est la base 16.

 

    Sur cet ensemble de tableaux on voit qu'il est donc nécessaire pour coder complètement tous les termes de coder chacune des variables hexadécimales sur 4 bits.

La valeur hexadécimale suivant F(16) sera 16 (10) se codera donc 10 (16) et 0001 0000(2).

Ce code est très simple à mettre en oeuvre et fait intervenir la représentation binaire des chiffres décimaux. 

exemple :

309(10) = 0001 0011 0101 (2) 

mais BCD,  309 (10) = 0011 0000 1001(BCD)

    Avec une représentation numérique construite uniquement avec des 1 et des 0 pas question de signes + ou -. Il faut trouver un artifice où les symboles + et - n'interviennent pas. La représentation des valeurs doit donc se faire exclusivement par des valeurs binaires.

Le complément vrai (CPLV):

    Le complément vrai ou complément à b (b signifiant la base dans laquelle on travaille) par rapport à un radical N s'obtient en faisant la soustraction A complémenté = N - A, avec N>A.

Ainsi le complément vrai en base 10 de 529 par rapport à 1000 est 471, par rapport à 10000 est de 9471.

L'opération consiste à complémenter chacun des bits d'une variable binaire.

Exemple : Le complément vrai de l'octet 16(16).

16(16) = 0001 0110 (2)

Son complément vrai sera :

CPLV 16(16) = 1110 1001 (2) = E9(16)

 

Remarque : on peut arriver plus rapidement à ce résultat en faisant

 

FF(16) - 16(16) = E9(16)

Complément à 2 (Négation) (CPL2):

L'opération consiste à complémenter chacun des bits d'une variable binaire et à ajouter 1.

exemple : la négation de l'octet 27(16)

 

 

Remarque : on peut arriver plus rapidement à ce résultat en faisant :

 

100(16) - 27(16) = D9(16) ; (100(16) = FF(16) + 1)

 

Pourquoi utiliser la notation avec complément ?

Une soustraction A - B peut s'écrire :

A - B = A + (R - B) modulo R.

Exemple en base 10 :

529 - 412 = 529 + (1000 - 412) modulo 1000 soit 117.

or 117 = (529 + 588) modulo 1000 = 1117 modulo 1000.

 

On observe que :

 

1/ Une soustraction se traite comme une addition si on fait intervenir le complément.

2/ Il est nécessaire de formater le complément. Le bit de poids le plus fort est le bit de signe. Par convention," 0" pour le signe "+", "1" pour le signe "-".

Exemples de calculs :

* Notation :

Exprimons le chiffre algébrique "-7" en binaire sur 4 bits :

+7 Û 0 1 1 1

-7 Û 1 1 0 0 1 (obtenu par complément à 2)

Exemples de soustractions :

 

1er cas : soustraction avec résultat positif sur quatre bits.

Représentons l'opération : 7 - 2 = 5

    2ième cas : résultat négatif sur 5 bits.

Représentons l'opération : 3 - 8 = - 5

Résultat :

 

1 1 0 1 1 résultat complémenté puisque le MSB = 1

CPLV 1 1 0 1 1 = 0 0 1 0 0

CPL2 1 1 0 1 1 = 0 0 1 0 1 ð 5

Le résultat est donc, en tenant compte du MSB =1 de -5...

    Souvent en automatisme on est amené à travailler par comparaison sur des états de variables internes (bits internes, états d'étapes,…). Les opérations sur mots logiques vont permettre de réaliser ce travail par masquage de certaines variables. On peut utiliser ce principe pour "synchroniser" les sorties d'un automate asynchrone (domaine de la bidouille...).

ET logique sur 8 bits :

 

0 1 0 0 0 1 1 0

AND

0 1 1 1 0 1 0 0

------------------

0 1 0 0 0 1 0 0 ¬ résultat logique

Ce qui fait en base 16 : 46(16) AND 74(16) = 44(16)

Ce qui fait en base 10 : 70(10) AND 116(10) = 68(10)

 

OU logique sur 8 bits :

 

0 1 0 0 0 1 1 0

OR

0 1 1 1 0 1 0 0

------------------

0 1 1 1 0 1 1 0 ¬ résultat logique

Ce qui fait en base 16 : 46(16) OR 74(16) = 76(16)

Ce qui fait en base 10 : 70(10) OR 116(10) = 118(10)

 

OU EXCLUSIF logique sur 8 bits :

 

0 1 0 0 0 1 1 0

XOR

0 1 1 1 0 1 0 0

------------------

0 0 1 1 0 0 1 0 ¬ résultat logique

Ce qui fait en base 16 : 46(16) OR 74(16) = 32(16)

Ce qui fait en base 10 : 70(10) OR 116(10) = 50(10)

    Le code ASCII (American Standard Code for Information Interchange) est le codage utilisé en informatique pour communiquer entre le clavier d'un micro-ordinateur et l'unité centrale. Il y a deux codes ASCII, le code ASCII standard et le code ASCII étendu. Le clavier est équipé d'un microprocesseur du type Intel 8048 qui scrute les circuits du clavier en permanence. Chaque touche possède un code distinct. Le code ASCII standard possède 127 caractères. Le code ASCII étendu en possède 255. Il faudra donc pour coder l'ensemble des caractères utiliser 7 bits (du bit 0 au bit 6) pour le code ASCII standard et 8 bits pour le code ASCII étendu (du bit 0 au bit 7) . Le code ASCII différencie les lettres majuscules des lettres minuscules. Par exemple, pour écrire "A", le microprocesseur du clavier envoie à l'unité centrale le code 41(16), pour écrire "a", le microprocesseur envoie à l'unité centrale le code 61(16). L'espace entre deux caractères c'est 20(16).

Remarque : bit 6 (B6) est le MSB et bit 0 (B0) est le LSB.

Tableau du code ASCII :