I. CODAGE DE L'INFORMATION
1. Généralités
1.1. Définitions
L'information constitue une mise en forme des connaissances à l'aide de symboles. L'ensemble de ces symboles constitue le code, ces symboles étant soit composés soit élémentaires. Ce choix du code est appelé le codage et dépend de certaines contraintes.
On appelle code élémentaire l'ensemble des symboles élémentaires, discernables et indécomposables.
Un code composé est un ensemble de symboles composés à l'aide de symboles élémentaires. La longueur L d'un symbole est le nombre de symboles élémentaires composant le code. Le code sera de longueur fixe si tous les éléments ont la même longueur.
On appellera :
Exemple
Le langage écrit est constitué d'un alphabet d'un ensemble de 26 caractères (n=26). Les mots sont les symboles composés et le code est de longueur variable. Le support de transmission est le papier. L'écriture constitue une mémorisation qui est considérée permanente.
1.2. Traitements
Le traitement de l'information consiste à appliquer sur un ensemble d'informations I1, appelé données, un ensemble de règles R pour récupérer un ensemble d'informations résultantes I2. Aucune information nouvelle n'est créée car I2 est inclus dans I1 + R.
1.3. Systèmes numériques
Le code le plus simple est formé de 2 éléments (n=2). En général, on utilise les symboles 0 et 1 pour représenter les
éléments de ce code. Ce symbole élémentaire est appelé bit (binary digit).
Un code composé sera constitué d'une suite de valeurs 0 et 1, suite dont on peut fixer la longueur si on le désire pour
obtenir les codes composés nommés :
2. Codage des nombres
2.1. Les nombres entiers
2.1.1. Codage BCD
Le codage BCD (Binary Coded Decimal) impose de représenter chaque chiffre d'un nombre décimal sur 4 bits. En effet, un chiffre est dans l'intervalle 0 à 9 donc un ensemble de 10 éléments. 10 est dans l'intervalle 23 et 24 donc un code sur 4 bits.
Supposons un code sur 16 bits (Lcc=16 bits). Pour coder la valeur décimale 192, on utilisera 4 quartets de la façon suivante : 0000-0001-1001-0010 (0192).
Inconvénients :
2.1.2. Code binaire
Saviez-vous qu'un ordinateur n'était capable de se trouver que dans deux états : allumé et éteint ?
(non, en panne n'est pas le troisième...) Et bien il en est de même pour l'ensemble de sa façon de
fonctionner, de parler, de jouer, de calculer... Le 2 est la base du tout !!! C'est d'ailleurs de ce
2 que provient le terme binaire, et nous allons en faire usage assez longuement ici.
Mais avant, replongeons-nous quelques instants à l'époque où nous avons appris à compter. La
maîtresse d'école nous a parlé de base de numération mais j'imagine que c'est depuis longtemps
dans les limbes de votre mémoire...
Nous utilisons couramment le système décimal pour représenter nos nombres, parfois sans le
savoir. Mais comment cela ? Simplement, rassurez-vous... Une base de numération permet de
représenter un nombre selon les puissances successives de cette base. Ce n'est pas clair ?
OK, alors prenons par exemple le nombre 123. La base décimale utilise les chiffres de 0 à 9.
On peut alors écrire 100 + 20 + 3 par 1x100 + 2x10 + 3x1. Et si on exprime le tout en fonction
des puissances de la base (base = 10 ici), cela donne 1x10^2 + 2x10^1 + 3x10^0 (en mathématiques,
un chiffre élevé à la puissance 0 donne 1).
Au final, un nombre est une addition de chiffres exprimés en fonction des puissances successives
de la base. Autre exemple : 405 s'écrit comme 4x10^2 + 0x10^1 + 5x10^0. Facile non ?
Pour revenir au sujet de notre exposé - la notation binaire -, il suffit d'avoir compris ce qui
précède pour comprendre ce qui suit ^_^... La différence essentielle existant entre les bases
est le nombre d'éléments utilisés pour représenter la base. Si en décimal nous avions 10 chiffres
(de 0 à 9), en binaire nous n'en avons plus que 2 : le 0 et le 1. Mais pas d'inquiétude, le principe
reste le même.
Par exemple, la valeur binaire 100 représente la valeur décimale 4. Comment ? Simplement en se
rappelant qu'une valeur s'exprime en fonction de puissances successives de la base.
Donc 100 = 1x2^2 + 0x2^1 + 0x2^0 = 4 + 0 + 0 = 4. Le passage du binaire au décimal se réalise
donc très simplement, comme vous avez pu le constater avec cet exemple.
2.1.2.1. Codage des entiers
Les entiers peuvent représenter des valeurs positives ou négatives. En codage informatique il est impossible de mettre un autre symbole qu'un 0 ou un 1. Il a donc été décidé d'utiliser le bit de poids le plus fort (donc celui le plus à gauche dans la représentation binaire). Ainsi si l'on considère que nous manipulons un entier non signé, alors il n'y aura pas de prise en compte de cet aspect relatif du binaire et donc que le nombre 8 bits 10000001 code la valeur décimale 129. Si l'on décide que le nombre est un nombre signé, alors, puisque le bit le plus fort est égal à 1, nous savons que ce sera une valeur négative.
Pour transformer un nombre positif en nombre négatif, nous avons besoin de plusieurs étapes :
Pour passer du décimal au binaire, on procède par divisions entières successives de la valeur
décimale avec la base recherchée (ici 2). Donc 4 en base 10 se décompose par 4 / 2 = 2 (reste 0)
puis 2 / 2 = 1 (reste 0). La valeur recherchée se lit ensuite en remontant depuis le quotient final
et en accolant les restes successifs soit, dans notre exemple, 100. CQFD !
Pour une histoire de nomenclature, les nombres s'écrivent parfois entre parenthèses avec la
valeur de la base en indice comme (100)2 qui représente 100 en binaire et est
équivalent à 4 en décimal encore noté (4)10.
En informatique, on trouve aussi souvent une notation avec une base 16 avec des valeurs de 0 à 9
et de A à F. Mais le principe est toujours le même. Par exemple, la valeur hexadécimale FF peut
sembler obscure mais s'exprime simplement comme Fx16^1 + Fx16^0. Vous me direz certainement que
l'ordinateur comprend rapidement cette donnée mais que l'être humain a plus de problème ? Mais non...
Sur une base de {0..9A..F}, F est l'équivalent de 15 donc (FF)16 = 15x16 + 15x1 = 240 + 15 = (255)10.
Pour information, les valeurs en hexadécimal peuvent être écrites de différentes manières selon
les contextes : $FF, 0xFF, (FF)16.
Allez d'autres exemples pour bien fixer le mécanisme :
1. Introduction
Un O.S. (Operating System), ou Système d'Exploitation, est un programme qui gère les ressources disponibles pour un ordinateur :
2. Le Hardware
La partie matérielle (le hardware) est composée de plusieurs processeurs, de mémoire, de contrôleurs de périphériques, de périphériques, et de tout un ensemble de mécanismes permettant les échanges d'informations entre-eux.
3. Le Software
Opposé au hardware, le logiciel est composé d'un ensemble d'éléments
Dans les systèmes numériques, les opérations élémentaires sur les bits correspondent à NOT, OR, AND et XOR. Pour manipuler ces éléments il est généralement pratique d'utiliser des tables de vérité, qui sont de simples tableaux à deux entrées et qui listent tous les cas pour une opération en particulier.
L'opération NOT effectue simplement l'inversion d'un bit. On passe ainsi de A = 0110 à Not(A) = 1001.
A | Not A |
---|---|
0 | 1 |
1 | 0 |
L'opération OR réalise l'opération booléenne signalant que l'un OU l'autre des bits est vrai (mis à 1). Si nous avons les valeurs suivantes A = 0110, B = 1100, alors l'opération OR permet de dire que A OR B = 0110 OR 1100 = 1110.
A | B | A OR B |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
L'opération AND réalise l'opération booléenne signalant que l'un ET l'autre des bits est vrai (mis à 1). C'est faux sinon. Si nous avons les valeurs suivantes A = 0110, B = 1100, alors l'opération AND permet de dire que A AND B = 0110 AND 1100 = 0100.
A | B | A AND B |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
L'opération XOR réalise l'opération booléenne signalant que le résultat est vrai seulement si uniquement l'un ou l'autre des bits est vrai (mis à 1). C'est le OU Exclusif. Si nous avons les valeurs suivantes A = 0110, B = 1100, alors l'opération XOR permet de dire que A XOR B = 0110 XOR 1100 = 1010.
A | B | A XOR B |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
mov rax,0
. Mais l'utilisation de xor rax,rax
est beaucoup plus rapide (requiert moins
de cycles processeur).