Il existe différents systèmes numériques basés sur la représentation binaire.
Numération de position
Le codage le plus courant est l'équivalent en base deux de la numération de position que nous utilisons quotidiennement en base 10.
Représentation des entiers positifs
Pour trouver la représentation binaire d'un nombre, on le décompose en somme de puissances de 2. Par exemple avec le nombre dont la représentation décimale est 59 :
59 = 1×32 + 1×16 + 1×8 + 0×4 + 1×2 + 1×1
59 = 1×2 + 1×2 + 1×2 + 0×2 + 1×2 + 1×2
59 = 111011 en binaire
Avec n bits, ce système permet de représenter les nombres entre 0 et 2-1. Il est donc possible de compter sur ses dix doigts jusqu'à 1023 (2-1) en binaire. Il suffit d'affecter à chaque doigt une valeur binaire (pouvant être représenté par un doigt plié).
Pour Robertv, avec 10 doigts on peut compter jusqu'à 1023. En effet si chaque doigt représente une puissance de 2 avec la convention doigt levé, alors la puissance de 2 est retenue (1 en binaire); doigt replié, alors la puissance de 2 n'est pas retenue (0 en binaire).
Doigt Main Puis. Valeur en
de 2 numération
décimale
Auriculaire de la main droite levé 20 1
Annulaire = 21 + 2
Majeur = 22 + 4
Index = 23 + 8
Pouce = 24 + 16
Pouce de la main gauche levé 25 + 32
Index = 26 + 64
Majeur = 27 + 128
Annulaire = 28 + 256
Auriculaire = 29 + 512
Somme =1 023
(Pour mémoire 2^10 =1 024)
Ceci confirme la formule
2^10-1=1 024-1
=1 023
On remarque qu'avec 10 doigts on peut prendre en compte les 10 premières puissances de 2 s'échelonnant de 20 à 29 c'est-à-dire la somme des 10 premières puissances de 2].
Représentation des entiers négatifs
Pour compléter la représentation des entiers, il faut pouvoir écrire des entiers négatifs. On ajoute pour cela à la représentation un bit de signe, placé en tête. Un bit de signe nul indique une valeur positive, un bit de signe positionné à un une valeur négative. Cette règle permet de rester cohérent avec le système de représentation des entiers positifs : il suffit d'ajouter un 0 en tête de chaque valeur.
Complément à un
Ce codage, fort simple, consiste à inverser la valeur de chaque bit composant une valeur binaire.
Par exemple, pour obtenir -5 :
0101 valeur décimale 5
1010 complément à un
Le souci avec un tel système est qu'il y a toujours deux représentations de la valeur 0 pour un nombre de bit donné.
Complément à deux
Afin de palier ce défaut, on a introduit la représentation par complément à deux. Celle-ci consiste à réaliser un complément à un de la valeur, puis d'ajouter 1 au résultat.
Par exemple pour obtenir -5:
0101 codage de 5 en binaire
1010 complément à un
1011 on ajoute 1 : représentation de -5 en complément à deux
Ce codage a l'avantage de ne pas nécessiter de différenciation spéciale des nombres positifs et négatifs, et évite en particulier le problème d'ordinateurs anciens (Control Data 6600) qui avaient un « +0 » et un « -0 » dont il fallait faire comprendre aux circuits de tests que c'était le même nombre ! Voici une addition de -5 et +7 réalisée en complément à deux sur 4 bits :
-5 1011
+7 0111
__ ____
2 (1) 0010 (on 'ignore' la retenue)
Avec n bits, ce système permet de représenter les nombres entre -2 et 2-1.
Code de Gray ou binaire réfléchi
Ce codage permet de ne faire changer qu'un seul bit à la fois quand un nombre est augmenté d'une unité. Le nom du code vient de l'ingénieur américain Frank Gray qui déposa un brevet sur ce code en 1953.
Codage binaire classique :
0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
Codage Gray ou binaire réfléchi :
0 0000
1 0001
2 0011
3 0010
4 0110
5 0111
6 0101
7 0100
Pour passer d'une ligne à la suivante, on inverse le bit le plus à droite possible conduisant à un nombre nouveau.
Le nom de code binaire réfléchi vient d'une méthode de construction plus pratique pour choisir quel bit inverser quand on passe d'un nombre au suivant:
- On choisit un code de départ: zéro est codé 0 et un est codé 1.
- Puis, à chaque fois qu'on a besoin d'un bit supplémentaire, on symétrise les nombres déjà obtenus (comme une réflexion dans un miroir).
- Enfin, on rajoute un 0 au début des "anciens" nombres, et un 1 au début des nouveaux nombres.
Exemple :
0 0 0 .0 0 00 0 .00 0 000
1 1 1 .1 1 01 1 .01 1 001
miroir->------ 2 .11 2 011
2 .1 2 11 3 .10 3 010
3 .0 3 10 -------
4 .10 4 110
5 .11 5 111
6 .01 6 101
7 .00 7 100
Ce code est surtout utilisé pour des capteurs de positions, par exemple sur des règles optiques. En effet, si on utilise le code binaire standard, lors du passage de la position un (01) à deux (10) -- permutation simultanée de 2 bits -- il y a risque de passage transitoire par trois (11) ou zéro (00), ce qu'évite le code de Gray.
On remarquera que le passage du maximum (sept sur 3 bits) à zéro se fait également en ne modifiant qu'un seul bit. Ceci permet par exemple d'encoder un angle, comme la direction d'une girouette: 0=Nord, 1=Nord-Est, 2=Est, ... 7=Nord-Ouest. Le passage de Nord-Ouest à Nord se fait également sans problème en ne changeant qu'un seul bit. Voir Roue de codage.
Le décodage des signaux lumineux d'un axe de souris mécanique est un décodage de code de Gray à 2 bits (décodage différentiel dans ce cas, car ce que l'on veut obtenir n'est pas la valeur décodée mais les transitions ±1 mod 4 de la valeur décodée).
Le code Gray sert également dans les tables de Karnaugh utilisées lors de la conception de circuits logiques.
Décimal codé binaire (« binary coded decimal », ou BCD)
Ce codage consiste à représenter chacun des chiffres de la numérotation décimale sur 4 bits:
1994 = 0001 1001 1001 0100
1×1000 + 9×100 + 9×10 + 4×1
Il présente l'avantage de simplifier la conversion avec la notation décimale.
Avec n bits (n multiple de 4), il est possible de représenter les nombres entre 0 et 10-1. Soit approximativement entre 0 et 1.778-1. Le BCD est un code redondant, en effet certaines combinaisons ne sont pas utilisées (comme 1111 par exemple).
Cette représentation évite par construction tous les problèmes gênants de cumul d'arrondi qui interviendraient lors de la manipulation de grands nombres dépassant la taille des circuits en arithmétique entière et obligent à recourir au flottant. Il est cependant possible de manipuler des nombres à précision arbitraire en utilisant un codage plus efficient que le BCD.
Il existe des variantes du codage BCD:
- code Aiken où 0, 1, 2, 3, 4 sont codés comme en BCD et 5, 6, 7, 8, 9 sont codés de 1011 à 1111. Il permet d'obtenir le complément à 9 en permutant les 1 et les 0.
- codage binaire excédent 3 qui consiste à représenter le chiffre à coder + 3.