Au début, il y avait le 0
Introduction à l'arithmétique des ordinateurs
, mercredi 18 avril 2012 - 13:40:35


Objet : Petite introduction simple et (je l'espère) compréhensible de la représentation des nombres dans un ordinateur
Niveau : Facile

1° Introduction
Dans de nombreuses occasions, je suis obligé d'écrire des chiffres dans une notation propre aux ordinateurs.
J'ai toujours assumé que tout le monde comprenais sans problème mais ce genre d'assomption n'est jamais bonne. Je me propose donc de faire un petit récapitulatif et explication du format binaire, octal et hexadécimal souvent employé.
J'imagine que pour les 3/4 des personnes cette présentation sera inutile mais peut être pas pour tout le monde


2° Hardware
Il peux paraitre surprenant de commencer un article sur l'arithmétique en parlant de matériel mais en informatique les choses sont rarement dues au hasard et j'aime bien donner des raisons concrètes aux explications que je donne (dans la mesure du possible)

On va donc remonter au premier micro-processeur: le Intel 4004
366708WorldsfirstmicroprocessorIntel4004
Sexy n"est ce pas ?? biggrin
date de sortie : 1971
processeur 4bits, fréquence d'horloge MAX : 740 kHz bigeek
Une vrai révolution à l'époque ...

Ce qui nous intéresse surtout c'est le brochage. Chaque patte du processeur à une utilisation
755374492px4004dil
Les pattes les plus importantes sont dans l'ordre :


Sur les pattes "Clock" on applique un signal carré tel que celui-ci :
878881clockpulse
"Clock Pulse" correspond à la fréquence du processeur soit dans le cas du i4004, 740 000 impulsions par secondes.
Ce qu'il faut bien comprendre, c'est que le processeur ne travaille pas en permanence !
En fait il effectue 1 opération à chaque front montant de l'impulsion de l'horloge ... A chaque front montant de l'impulsion d'horloge, il va "lire" l'état des pattes "Data bus" en prenant comme convention

et voici comment on en arrive au binaire !

Imaginons qu'à un instant donné t0, on applique 0V sur D0 et D2, et 5V sur D1 et D3 : le processeur va "lire": 0101
Le résultat de tout ceci, c'est que, quelque soit le type de données que vous fournissez à votre machine (texte, son, image, vidéo ...etc.), elle ne vois QUE des 1 et des 0


3° Binaire
Donc un processeur 4 bits ne sait lire que 4 digits à chaque cycle d'horloge. Soit comme possibilités :


Le calcul en binaire est assez simple :
0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 10

mais on utilise plus fréquemment les opérations binaires ou booléennes AND , OR ou XOR de la manière suivante :
AND (et) : le résultat est 1 si les deux éléments de l'opération sont égales à 1
0 AND 0 = 0
0 AND 1 = 0
1 AND 1 = 1

OR (ou) : le résultat est 1 si au moins un des deux éléments de l'opération est égal à 1
0 OR 0 = 0
0 OR 1 = 1
1 OR 1 = 1

XOR (ou exclusif) : le résultat est 1 seulement si un des deux éléments de l'opération est égal à 1
0 XOR 0 = 0
0 XOR 1 = 1
1 XOR 0 = 1
1 XOR 1 = 0

Ainsi sur 4 bits cela donne :
0101
AND
1111
=
0101

0101
OR
1111
=
1111

0101
XOR
1111
=
1010

Pour convertir le binaire en décimal, c'est assez simple. On considère que chaque bit, en partant de la gauche vers la droite, est une puissance de 2, en commençant par 0. On dit aussi que le binaire est un système de calcul en base 2 (alors que le décimal est un système de calcul en base 10)
987413binaire

En suivant ce tableau, on peux très facilement convertir une valeur binaire en décimal :
0101 = 0 + 4 + 0 + 1 = 5
1111 = 8 + 4 + 2 + 1 = 15

On constate que avec 4bits la valeur maximale est 15 !!


4° Hexadécimal et Octal
Après les processeurs 4 bits, les processeurs 8 bits ont fait rapidement leur apparition.
Un développeur étant par nature un feignant wink (je développe des softwares parce que je suis une grosse feignasse et que faire 2 fois la même chose à la main me fait chier ... autant laisser l'ordinateur faire le travail à ma place), cela devenait long de taper tout ces bits:
01010101
Il faut aussi se souvenir que les premiers ordinateurs n'avait pas d'écran et se programmaient avec des switches ... ou des cartes perforés rolleyes

Donc un jour, un programmeur plus feignant que les autres à eu l'idée de créer l'hexadécimal autrement dit : le système de calcul en base 16 ! L'idée étant de remplacer chaque bloc de 4bits par 1 seul chiffre.
Seul problème, nous avons vu précédemment que la valeur maximale de 4bits est 15 en décimal, donc il n'y a pas assez de chiffre dans notre système décimal ...
Qu'à cela ne tienne, il a simplement utilisé des lettres pour les chiffres manquants !!!
523785Hexa
En règle générale, on place un 0x ou un 0h, voir dans certain cas un # pour signaler que le chiffre est en hexadécimal
Donc convertir un octet (8bits) en hexadécimal, c'est très simple :
01101100 = on divise en 2 parties => 0110 1100 = et on converti suivant le tableau => 0x6C (ou #6C )

A signaler, une petite particularité qui déroute toujours les débutants:
F + 1 = 10
FF + 1 = 100

Il existe un autre système de calcul toujours en utilisation, le système en base 8 ou octal, pour lequel on ne compte que de 0 à 7 !!
C'est quasiment la même chose que le tableau précédent mais on s'arrête à la moitié du tableau (donc 3bits)

C'est un système fréquemment utilisé par les utilisateurs de Linux (et Unix en général) même s'ils ne s'en rendent pas compte ...
En effet, le système de gestion des droits sur les fichiers sous Linux est typiquement un système octal !!!
rwx = 111 = 7 (CQFD)

mais c'est la seule utilisation qui me vient à l'esprit.
A noter aussi, la même petite astuce qu'en hexadécimal, mais encore plus singulière :
en octal :
7 + 1 = 10
77 + 1 = 100
comprends_po

5° Conclusion
Voilà , c'est tout pour aujourd'hui
Ca n'a l'air de rien, mais c'est important de bien comprendre la relation entre binaire/décimal/hexadécimal et de se sentir à l'aise avec les conversions

ericc me


Cet article est de ericc is dreaming
( https://ericc.eu/e107_plugins/content/content.php?content.17 )