Documente Academic
Documente Profesional
Documente Cultură
L1 INGENIERIE
ARCHITECTURE DES
ORDINATEURS
I- Définitions ……………………………………………………………………...... 28
III- Conversions…………………………………………………………………...... 33
BIBLIOGRAPHIE…………………………………………………………………………. 51
I- Définitions
1. Historique
Les machines à calculer jouèrent un rôle primordial dans le développement des ordinateurs
pour deux raisons tout à fait indépendantes. D'une part, pour leurs origines, c'est pendant le
développement d'une machine à calculer différentielle que Charles Babbage imagina l’ancêtre
des ordinateurs: une machine à calculer programmée par la lecture de cartes perforées
(identiques à celles du métier à tisser Jacquard) avec mémoires et imprimantes, qui inspirera
le développement des premiers ordinateurs cent ans plus tard (Z3, ABC, ENIAC, SSEM...) et
qui nous amènera aux mainframes des années 1960.
C'est dans les années 1970 et l'invention du premier microprocesseur, l'Intel-4004, qui est à
l'origine de l'explosion de la micro-informatique à partir de 1975. Aujourd'hui un, ou
plusieurs, microprocesseur réside au cœur de tous les microprocesseurs actuels quelles que
soient leurs tailles ou fonctions.
- L’Informatique
Apparue au milieu du 20ème siècle, elle a connu une évolution extrêmement rapide. A sa motivation
initiale qui était de faciliter et d'accélérer le calcul, se sont ajoutées de nombreuses fonctionnalités,
comme l'automatisation, le contrôle et la commande de processus, la communication ou le partage de
l'information.
C’est l’ensemble des traitements rationnels, notamment par des moyens automatiques, de
l’information considérée comme le support des connaissances et communications.
En sommes nous pouvons retenir que l’informatique est la science du traitement automatique et
rationnelle de l’information à l’aide d’un appareil électronique appelé ordinateur.
- L’ordinateur
C’est l’outil principal de l’informatique, il se définit comme étant une machine capable d’accepter les
données, de leur appliquer des transformations définies par un programme et de produire des résultats.
Il peut aussi se définir comme machine à traiter l’information par des moyens électroniques à l’aide de
programme enregistré.
Un ordinateur est une machine électronique qui fonctionne par la lecture séquentielle d'un ensemble
d'instructions qui lui font exécuter des opérations logiques et arithmétiques sur des chiffres binaires.
Une donnée est une information codée sous une forme conventionnelle traitable par l’ordinateur.
Pour qu’une information puisse être traitée par un ordinateur, elle doit obéir à certaines règles de
représentation. Cette information ainsi représentée sous une forme conventionnelle constitue une
donnée. Le traitement des données par l’ordinateur peut-être décomposé en six (6) étapes qui sont les
suivants :
- L’archivage
-Le programme
En effet, un programme est une suite d’instructions élémentaires, qui vont être exécutées dans
l’ordre par le processeur. Ces instructions correspondent à des actions très simples, telles
qu’additionner deux nombres, lire ou écrire une case mémoire, etc. Chaque instruction est codée
(physiquement câblée) en mémoire sur quelques octets. Le processeur est capable d’exécuter des
programmes en langage machine, c’est-à-dire composés d’instructions très élémentaires suivant un
codage précis. Chaque type de processeurs est capable d’exécuter un certain ensemble
d’instructions, son jeu d’instructions.
Pour écrire un programme en langage machine, il faut donc connaître les détails du
fonctionnement du processeur qui va être utilisé. Les langages de programmation utilisés de nos
jours sont très largement plus évolués que le langage machine. Néanmoins ils reposent sur ce
dernier: après compilation ils sont transformés (traduits) en langage machine exécutable par le
processeur.
Périphériques
Mémoire d’entrée
Centrale
Unité de Périphériques de
Bureautique Gestion Industriel Utilitaires et Jeux
Contrôle et de communication et
commande de sécurité
Traitement de Antivirus
Texte et OCR
SGBD
Par taille
Par architecture
Amiga
Atari ST
Compatible PC
Macintosh
stations SPARC
II- Le Hardware (partie Matérielle)
C’est l’ensemble de la composition matérielle de l’ordinateur (mémoire, carte mère, carte son,
moniteur, etc...). Il se décompose de la manière suivante :
-L’unité centrale
C’est la partie essentielle de l’ordinateur, celle ou sont effectués les traitements sous contrôle du
programme.
Elle est organisée autour d’un microprocesseur et regroupe trois organes principaux :
- La mémoire centrale où sont stockés les programmes et les données en cours de traitement.
L’unité arithmétique et logique ou UAL est l’élément qui réalise les opérations
élémentaires (additions, soustractions...), les opérateurs logiques (ET, OU, NI, etc.) et
les opérations de comparaison (par exemple la comparaison d’égalité entre deux zones
de mémoire). C’est l’UAL qui effectue les calculs de l’ordinateur.
- L’unité de contrôle et de commande (UCC) ayant pour rôle la mise œuvre des instructions de
programme :
L’unité de contrôle prend ses instructions dans la mémoire. Celles-ci lui indiquent ce
qu’elle doit ordonner à l’UAL et, comment elle devra éventuellement agir selon les
résultats que celle-ci lui fournira. Une fois l’opération terminée, l’unité de contrôle
passe soit à l’instruction suivante, soit à une autre instruction à laquelle le programme
lui ordonne de se brancher.
-Les périphériques
Ce sont des organes extérieurs à l’Unité Centrale permettant de communiquer avec celle-ci.
On distingue :
Les périphériques d’entrée : Ils permettent de faire rentrer des informations dans le système.
Ce sont entre autres le clavier, le scanner, la souris, la webcam, etc ….
Les périphériques de sortie : Ils permettent de faire ressortir des informations du système. Ce
sont l’imprimante, l’écran, les baffes, etc…
- Les interfaces
1. l’unité arithmétique et logique (UAL) ou unité de traitement : son rôle est d’effectuer les
opérations de base, un peu comme le ferait une calculatrice ;
2. l’unité de contrôle. C’est l’équivalent des doigts qui actionneraient la calculatrice ;
3. la mémoire qui contient à la fois les données et le programme qui dira à l’unité de contrôle
quels calculs faire sur ces données. La mémoire se divise entre mémoire vive (programmes et
données en cours de fonctionnement) et mémoire permanente (programmes et données de base
de la machine) ;
4. les entrées-sorties : dispositifs qui permettent de communiquer avec le monde extérieur.
C’est l’ensemble des programmes (logiciels) et toutes autres données contenues dans les mémoires de
l’ordinateur (répertoire, fichiers).
Un fichier peut être considéré comme le support de l’information (à l’instar d’une feuille de papier
pour l’écriture).
Le logiciel peut prendre une forme exécutable (c'est-à-dire directement compréhensible par le
micro-processeur) ou source, c'est-à-dire dont la représentation est composée d'une suite
d'instructions directement compréhensible par un individu. Ainsi donc, on peut considérer le
logiciel comme une abstraction qui peut prendre une multitude de formes: il peut être imprimé
sur du papier, conservé sous forme d'un fichier fichiers informatiques ou encore stocké dans
une mémoire (une disquette, une clé USB).
Un logiciel applicatif, le type de logiciel le plus courant, aussi appelé application informatique : un
logiciel dont les automatismes sont destinés à assister un utilisateur dans une de ses activités.
Un logiciel système (ou logiciel de base). C'est un logiciel dont les automatismes contrôlent
l'utilisation du matériel informatique par les logiciels applicatifs. Les automatismes du logiciel
système sont indépendants de l'activité pour laquelle l'appareil est utilisé.
Le système d'exploitation sert d'interface entre le matériel et les logiciels applicatifs. C'est l'ensemble
de logiciels système central qui contrôle l'utilisation de l'appareil informatique par les autres logiciels.
Le logiciel peut être une application informatique complète, ou une pièce détachée telle qu'un
composant logiciel ou un plugin.
Les programmes, les scripts et les bibliothèques logicielles contiennent des suites
d'instructions en groupes appelés fonctions ou procédures. Dans une bibliothèque logicielle
chaque fonction ou procédure peut être exécutée séparément, tandis que dans un programme
ou un script l'exécution de l'instruction de départ provoque l'exécution en chaine de toutes les
autres instructions. L'exécution des instructions est rarement linéaire.
Dans un script, les instructions sont écrites sous une forme facile à lire pour un humain, et
exécutable par l'appareil informatique par l'intermédiaire d'un logiciel appelé interprète ou
interpréteur. Dans un fichier de code source les instructions sont écrites sous une forme facile
à lire pour un humain, un logiciel appelé compilateur le transformera en code machine -
exécutable par l'appareil informatique, ou en bytecode - facile à lire pour un logiciel
émulateur .
Le processeur, (ou CPU, Central Processing Unit,“ Unité centrale de Traitement ”en français) est le
composant essentiel d’un ordinateur qui interprète les instructions et traite les données d’un
programme.
Le processeur est un circuit électronique complexe (circuit intégré) qui exécute chaque instruction très
rapidement, en quelques cycles d’horloges. Toute l’activité de l’ordinateur est cadencée par une
horloge unique, de façon à ce que tous les circuits électroniques travaillent tous ensemble de façon
synchronisée. La fréquence de cette horloge s’exprime en MHz (millions de cyles par seconde) ou
GHz (milliards de cycles par secondes). Par exemple, un processeur “Intel Core 2 Duo P8400 ”
possède une horloge cadencée à 2,26GHz.
1- la largeur de ses registres internes de manipulation de données (8, 16, 32, 64, 128bits);
4- son jeu d’instructions (ISA en anglais, Instructions Set Architecture) dépendant de la famille
(CISC, RISC, etc);
- CISC (Complex Instruction Set Computer ): choix d’instructions aussi proches que possible
d’un langage de haut niveau;
- RISC (Reduced Instruction Set Computer): choix d’instructions plus simples et d’une
structure permettant une exécution très rapide ;
- DSP (Digital Signal Processor). Même si cette dernière famille (DSP) est relativement
spécifique.
En effet un processeur est un composant programmable et est donc apriori capable de réaliser tout type
de programmes. Les DSP sont des processeurs Spécialisés pour les calculs liés au traitement de
signaux.
- l’unité de traitement, aussi appelée Unité Arithmétique et Logique (U.A.L.), exécute les
instructions qui manipulent les données. L’Unité Arithmétique et Logique (en anglais
Arithmetic And Logical Unit-ALU) prend en charge les calculs arithmétiques élémentaires et
les tests;
- Les registres, qui sont des mémoires de petite taille (quelques octets), suffisamment rapides
pour que l’UAL puisse manipuler leur contenu à chaque cycle de l’horloge. Un certain nombre
de registres sont commun à la plupart des processeurs.
Remarque :
L’unité de traitement et l’unité de contrôle sont associées à des registres chargées de stocker
les différentes informations à traiter.
Les registres d'usage général permettent à l'unité de traitement de manipuler des données à
vitesse élevée. Ils sont connectés au bus de données interne au microprocesseur.
Ces deux unités (traitement et contrôle) communiquent avec la mémoire principale, la première pour
lire les instructions, la seconde pour recevoir/ transmettre des données binaires, mais ils
communiquent également avec les différents périphériques (clavier, souris, écran, etc.).
Le processeur est parfois appelé CPU ( de l’anglais “ Central Processing Unit ” ) ou encore MPU
(Micro-Processing Unit )pour les microprocesseurs. Un microprocesseur n’est rien d’autre qu’un
processeur dont tous les constituants sont réunis sur la même puce électronique (pastille de silicium),
afin de réduire les coûts de fabrication et d’augmenter la vitesse de traitement. Les micro-ordinateurs
(ordinateurs personnels) sont tous équipés de microprocesseurs. L’architecture de base des processeurs
équipant les gros ordinateurs est la même que celle des microprocesseurs.
4- Opérations du processeur
Le programme est représenté par une série d’instructions qui réalisent des opérations en liaison avec la
mémoire vive de l’ordinateur. Il y a quatre étapes lors du traitement des instructions:
La première étape, FETCH (recherche), consiste à rechercher une instruction dans la mémoire vive de
l’ordinateur. L’emplacement dans la mémoire est déterminé par le compteur de programme, qui stocke
l’adresse de la prochaine instruction dans la mémoire de programme.
Après qu’une instruction a été recherchée, le compteur de programme est incrémenté par la longueur
du mot d’instruction. L’instruction que le processeur recherche en mémoire est utilisée pour
déterminer ce que le CPU doit faire.
DECODE
Dans l’étape DECODE (décodage), l’instruction est découpée en plusieurs parties telles qu’elles
puissent être utilisées par d’autres parties du processeur. La façon dont la valeur de l’instruction est
Interprétée est définie par le jeu d’instructions du processeur. Souvent, une partie d’une instruction,
appelée op code (code d’opération), indique quelle opération est à faire, par exemple une addition. Les
parties restantes de l’instruction comportent habituellement les autres informations nécessaires à
l’exécution de l’instruction comme par exemple des valeurs pour l’addition.
EXECUTE
Après les étapes de recherche et de décodage arrive l’étape EXECUTE (exécution) de l’instruction. Au
cours de cette étape, différentes parties du processeur sont mises en relation pour réaliser l’opération
souhaitée. Par exemple, pour une addition, l’unité arithmétique et logique(UAL) sera connectée à des
entrées et des sorties. Les entrées présentent les nombres à additionner et les sorties contiennent la
somme finale. L’UAL contient le circuit électronique pour réaliser des opérations d’arithmétique et de
logique simples sur les entrées (addition, opération sur les bits). Si le résultat d’une addition est trop
grand pour être codé par le processeur, un signal de débordement est positionné dans un registre d’état.
WRITEBACK
La dernière étape WRITE BACK ( écriture du résultat), écrit tout simplement les résultats de l’étape
d’exécution en mémoire. Très souvent, les résultats sont écrits dans un registre interne au processeur
pour bénéficier de temps d’accès très courts pour les instructions suivantes. Dans d’autres cas, les
résultats sont écrits plus lentement dans des mémoires RAM, donc à moindre coût et acceptant des
codages de nombres plus grands.
La mémoire est divisée en emplacements (des cases mémoires contiguës) de taille fixe (par exemple
huit bits) utilisés pour stocker instructions et données. En principe, la taille d’un emplacement
mémoire pourrait être quelconque; en fait, la plupart des ordinateurs en service aujourd’hui utilisent
des emplacements mémoire d’un octet (“byte” en anglais, soit huit bits, unité pratique pour coder un
Caractère par exemple).
1- Adresse mémoire
Seul le processeur peut modifier l’état de la mémoire. Chaque emplacement mémoire conserve les
informations que le processeur y ecrit jusqu’à coupure de l’alimentation électrique, où tout le contenu
est perdu (contrairement au contenu des mémoires externes comme Les disquettes et disques durs). On
parle de mémoire vive. Les seules opérations possibles sur la mémoire sont:
- écriture d’un emplacement: le processeur donne une valeur et une adresse, et la mémoire
range la valeur à l’emplacement indiqué par l’adresse;
- La capacité : nombre total de bits que contient la mémoire. Elle s’exprime aussi souvent en
octet;
- Le format des données : nombre de bits que l’on peut mémoriser par case mémoire. On parle
de la largeur du mot mémorisable;
- Le temps d’accès : temps qui s’écoule entre l’instant où a été lancée une opération de
lecture/écriture en mémoire et l’instant où la première information est disponible sur le bus de
données;
- Le temps de cycle : il représente l’intervalle minimum qui doit séparer deux demandes
successives de lecture ou d’écriture;
4- RAM
Nous savons qu’il existe deux types distincts de mémoire : les mémoires vives et les mémoires mortes.
Une mémoire vive sert au stockage temporaire de données. Elle doit avoir un temps de cycle très court
pour ne pas ralentir le microprocesseur. Les mémoires vives sont en général volatiles : elles perdent
leurs informations en cas de coupure d’alimentation. (Certaines d’entre elles, ayant une faible
consommation, peuvent être rendues non volatiles par l’adjonction d’une batterie.) Il existe deux
grandes familles de mémoires RAM (Random Acces Memory: Mémoire à accès aléatoire):
RAM statique
Le bit mémoire d’une RAM statique (SRAM) est composé d’une bascule (composant électronique
élémentaire).Chaque bascule contient entre quatre et six transistors.
RAM dynamique
Avantages: Cette technique permet une plus grande densité d’intégration, car un point mémoire
nécessite environ quatre fois moins de transistors que dans une mémoire statique. Sa consommation
s’en retrouve donc aussi très réduite;
5- ROM
Pour certaines applications, il est nécessaire de pouvoir conserver des informations de façon
permanente même lorsque l’alimentation electrique est interrompue. On utilise alors des mémoires
mortes ou Mémoires à lecture seule (ROM: Read Only Memory). Ces mémoires sont non volatiles.
Ces mémoires, contrairement aux RAM, ne peuvent être que lue. L’inscription en mémoire des
données reste possible mais est appelée programmation. Suivant le type de ROM, la Méthode de
programmation changera. Il existe donc plusieurs types de ROM:
6- Types de registres
Accumulateur : ce registre est utilisé pour stocker les données en cours de traitement par l’UAL;
Registre d’adresses : il contient toujours l’adresse de la prochaine information à lire par l’UAL: soit
la suite de l’instruction en cours, soit la prochaine instruction;
Registre d’état : il sert à stocker le contexte du processeur, ce qui veut dire que les différents bits de
ce registre sont des “ drapeaux ”(flags) servant à stocker des informations concernant le résultat de la
dernière instruction exécutée.
Pointeurs de pile : ce type de registre, dont le nombre varie en fonction du type de processeur,
contient l’adresse du sommet de La pile(ou des piles);
Un bus est un ensemble de fils qui assure la transmission du même type d’information. On retrouve
trois types de bus véhiculant des informations en parallèle dans un système de traitement programmé
de l’information :
- un bus d'adresses: unidirectionnel qui permet la sélection des informations à traiter dans un
espace mémoire (ou espace adressable) qui peut avoir 2n emplacements, avec n = nombre de
conducteurs du bus d'adresses.
Décodage d’adresses
Liaisons processeur-mémoire:
Les informations échangées entre la mémoire et le processeur circulent sur des bus .Un bus est
simplement un ensemble de n fils conducteurs, utilisés pour transporter n signaux binaires. Le bus
d’adresse est un bus unidirectionnel : seul le processeur envoie des adresses. Il est composé de n fils;
on utilise donc des adresses de n bits. La mémoire peut posséder au maximum 2n emplacements
(adresses 0 à 2n 1). Le bus de données est un bus bidirectionnel. Lors d’une lecture, c’est la mémoire
qui envoie un mot sur le bus (le contenu de l’emplacement demandé); lors d’une écriture, c’est le
processeur qui envoie la donnée.
Remarque : lorsqu’un composant n’est pas sélectionné, ses sorties sont mises à l’état « haute
impédance » afin de ne pas perturber les données circulant sur le bus. ( elle présente une impédance de
sortie très élevée = circuit ouvert ).
Mémoire de masse : on les appelle ainsi pour leur grande capacité de stockage permanent. Ces
périphériques sont dotés d’un contrôleur permettant de les faire dialoguer avec le microprocesseur.
Actuellement, les plus répandus sont l’IDE et le SCSI. Le SCSI présente des débits plus importants
que l’IDE (160Mo/s contre 133Mo/s) et permet de connecter plus de périphériques sur le même
contrôleur (7 contre 4). Néanmoins, cette technologie étant plus onéreuse, on la retrouve surtout sur
des serveurs alors que l’IDE est présent dans tous les PC. A l’heure actuelle, ces deux types de
contrôleur sont en fin de vie et sont progressivement remplacés par des contrôleur de type Serial ATA.
Ce sont des contrôleurs série dérivés de l’interface IDE qui vont permettent d’atteindre des débits de
600 Mo/s.
Les périphériques internes de stockage sont principalement des périphériques utilisant des
supports magnétiques (disque dur) ou optiques (CDROM, DVDROM).
1- Le disque dur
Les disques durs sont capables de stocker des quantités impressionnantes d'informations, et surtout de
les ordonner et de les retrouver rapidement.
Principe :
Le disque dur est constitué de plusieurs plateaux empilés, entre lesquels se déplace un bras comptant
plusieurs têtes de lecture. Chaque plateau est recouvert d'une surface magnétique sur ses deux faces et
Le formatage :
Le formatage de bas niveau permet d'organiser la surface du disque en éléments simples (pistes et
secteurs) qui permettront de localiser l'information. Le nombre total de pistes dépend du type de
disque. Il est effectué en usine lors de la fabrication du disque. Chaque piste est découpée en secteurs.
Toutefois l'unité d'occupation d'un disque n'est pas le secteur, trop petit pour que le système puisse en
tenir compte. On utilise alors un groupe d'un certain nombre de secteurs (de 1 à 16) comme unité de
base. Ce groupe est appelé Bloc ou Cluster. C'est la taille minimale que peut occuper un fichier sur le
disque. Pour accéder à un secteur donné, il faudra donc déplacer l'ensemble des bras et attendre ensuite
que ce secteur se positionne sous les têtes. L’accès à un bloc est aléatoire alors que l’accès à un
secteur est séquentiel.
Une autre unité de lecture/écriture est le cylindre. Un cylindre est constitué par toutes les pistes
superposées verticalement qui se présentent simultanément sous les têtes de lecture/écriture. En effet,
il est plus simple d'écrire sur les mêmes pistes des plateaux superposés que de déplacer à nouveau
l'ensemble des bras.
Le formatage de haut niveau permet de créer un système de fichiers gérable par un système
d'exploitation (DOS, Windows, Linux, OS/2, etc ...).
La défragmentation : A mesure que l'on stocke et supprime des fichiers, la répartition des fichiers sur
les différents clusters est modifiée. L'idéal, pour accéder rapidement à un fichier, serait de pouvoir
stocker un fichier sur des clusters contigus sur le même cylindre. La défragmentation permet de
réorganiser le stockage des fichiers dans les clusters pour optimiser la lecture.
A noter que les disques durs actuels sont équipés de cache mémoire afin de diminuer les temps
d’accès.
Le disque optique numérique résulte du travail mené par de nombreux constructeurs depuis 1970. La
terminologie employée varie selon les technologies employées et l’on retrouve ainsi les abréviations
de CD (Compact Disk), CDROM (CD Read Only Memory), CDR, (CD Recordable), DVD (Digital
Video Disk), DVDROM (DVD Read Only Memory), etc… Le Compact Disc a été inventé par Sony et
Philips en 1981 dans le but de fournir un support audio et vidéo de haute qualité.
Principe CD-ROM:
Cette piste n’est pas régulière mais oscille autour de sa courbe moyenne. La fréquence de ces
oscillations est de 22,05 kHz. Cette oscillation permet à la tête de lecture de suivre la courbe et de
réguler la vitesse de rotation du CD.
Principe DVDROM :
Le DVD-ROM (Digital Versatile Disc - Read Only Memory) est apparu en 1997 et est
principalement dédié à la vidéo. C’est en fait un CD-ROM dont la capacité est bien plus grande. En
effet, la lecture/écriture est effectuée à partir d’un laser rouge (650 et 635 nm) et permet d’obtenir
des creux beaucoup plus petits et donc de stocker plus d’informations. Les deux longueurs d’ondes
utilisées permettent de lire/écrire sur des DVD "double couche". Ces disques sont constitués d'une
couche transparente et d'une couche réflexive et permettent donc de stocker encore plus
d’informations sur un seul CD.
DVD-RAM : le disque simple face permet de stocker 2.6 Go. Il n’est pas compatible avec les lecteurs
de salon.
DVD-RW de Sony, Philips et HP permet de stocker 4.7Go par face. Il est entièrement compatible
avec les platines de salon.
DVD+RW est le nouveau standard concurrent au DVD-RW. Il est entièrement compatible avec les
platines de salon. Plusieurs marques ont formé une alliance et développent des graveurs DVD
présentant des temps d’accès plus faible et des vitesses de gravure plus importante.
Une disquette est composée d'un fin disque de plastique souple renforcé en son centre sur
lequel est apposé un substrat magnétique. Ce disque est enveloppé d'une coque de protection
en matière plastique comprenant une couche interne de ouatinage améliorant la rotation du
disque et son nettoyage et une couche externe rigide ou semi-rigide. Cette dernière couche
comprenant des dispositifs physiques à destination du lecteur permettant notamment la
protection contre l'écriture et des détrompeurs divers. Les formats de disquettes les plus
courants sont des dimensions de 8 pouces, 5,25 pouces et 3,5 pouces (1 pouce vaut 2,54 cm) ;
la dimension correspondant au diamètre du disque magnétique.
Les Clé USB et les cartes mémoires sont aussi des mémoires de masse.
V- Représentation de l’information
Une information se définit comme suit : tout renseignement, tout fait, toute donnée
susceptible d’améliorer notre connaissance sur un sujet donné.
La représentation des données par un ordinateur consiste à associer chaque type d'information un
certain nombre d'octets. Pour un type d'information donnée, le domaine des valeurs possibles dépendra
bien entendu du nombre d'octets choisi pour sa représentation, mais également de l'utilisation faite de
cette suite d'octets.
Les informations traitées par un ordinateur peuvent être de différents types (texte, nombres, etc.) mais
elles sont toujours représentées et manipulées par l’ordinateur sous forme binaire. Toute information
sera traitée comme une suite de 0 et de 1. L’unité d’information est le chiffre binaire (0 ou 1), que l’on
appelle bit (pour binary digit, chiffre binaire). Le codage d’une information consiste à établir une
correspondance entre la représentation externe (habituelle) de l’information (le caractère A ou le
nombre 36 par exemple),et sa représentation interne dans la machine, qui est une suite de bits.
On utilise la représentation binaire car elle est simple, facile à réaliser techniquement à l’aide de
bistables (système à deux états réalisés à l’aide de transistors,
Notion de données
C’est une information codée sous forme conventionnelle traitable par l’ordinateur.
Dans les technologies de l'information, une donnée est une description élémentaire, souvent
codée, d'une réalité (chose, transaction, événement, etc.)
La structuration des données joue un rôle clé dans la sécurité informatique, notamment dans la
gestion des certificats électroniques. Les principales données impliquées dans les certificats
sont les critères communs et les tiers de confiance.
2- Notion de fichier
En informatique, un fichier est une suite de données structurée (souvent sous la forme d'une liste
d'enregistrements suivant un même format), portant un nom et codé sur un support. Un système de
fichiers est la manière dont un ensemble de fichiers informatiques sont regroupés et rangés dans une
partition d'un support. Le système de fichiers se présente généralement comme une structure
arborescente de répertoires (ou dossiers) dont l'origine est appelée racine. Il est créé par une opération
de formatage du support.
3- Unité de mesure
Les unités de mesure suivantes sont utilisées en informatique pour quantifier la taille de la
mémoire d'un ordinateur, l'espace utilisable sur un disque dur, la taille d'un fichier, d'un
répertoire ou autre.
L’octet (symbole "o") est une unité de mesure en informatique indiquant une quantité de
données.
1 pétaoctet 1 Po 250 octets = 1 024 To = 1 125 899 906 842 624 octets
1 exaoctet 1 Eo 260 octets = 1 024 Po = 1 152 921 504 606 846 976 octets
1 zettaoctet 1 Zo 270 octets = 1 024 Eo = 1 180 591 620 717 411 303 424 octets
1 yottaoctet 1 Yo 280 octets = 1 024 Zo = 1 208 925 819 614 629 174 706 176 octets
I- Définitions
1- Nombres et codes
Nous manipulons tous les jours des nombres et des codes. Par exemple, les quantités sont exprimées
avec des nombres et la monnaie est une occasion fréquente de manipuler des nombres. Par contre, le
code secret d’une carte bancaire est fait de chiffres, mais ce n’est pas un nombre : c’est un code. Un
numéro de téléphone est aussi un code (pas un nombre), ainsi que le numéro de sécurité sociale. Dans
tous ces exemples, les chiffres sont à la base de l’expression des nombres ou des codes. Nous
acceptons assez naturellement l’usage des chiffres pour exprimer des choses de nature finalement
assez différentes (des nombres ou des codes). Les chiffres utilisés sont ceux de la base dix (0,1,
2,…8,9). Dans les ordinateurs, et plus particulièrement en électronique numérique, il se passe la même
chose ; on utilise les chiffres pour représenter des nombres et des codes ; la seule différence est qu’il
s’agit des chiffres de la base deux (0 et 1).
Pour la carte bancaire, c’est un groupement de quatre chiffres (de la base dix). Pour le numéro de
téléphone, c’est un groupement de dix chiffres. Pour le numéro de sécurité sociale, on dispose de 13
chiffres.
Les chiffres composant le code sont ordonnés. Le nombre de chiffres est constant. Mais attention,
n’importe quel groupement de quatre chiffres ne donne pas un code valide pour une carte bancaire. Le
code est fabriqué en respectant une technique particulière.
Par exemple, le numéro de S.S. est composé de plusieurs codes ou nombres ayant une signification
particulière : code du sexe, année et mois de naissance, codes du département et du lieu de naissance,
numéro d’ordre de naissance. De même, les deux premiers chiffres d’un numéro de téléphone
correspondent à la zone géographique du correspondant ou au service.
On peut donc conclure que le code est une représentation signifiant quelque chose.
La relation entre le code et le sens qui lui est attribué est l’affaire d’une convention. Quand on connaît
la convention de codage, il est possible de procéder à un décodage ou plus simplement vérifier au
moins si le code est valide. On sait par exemple que le numéro de téléphone 14.33.22.01.45 n’est pas
valide (les deux premiers chiffres ‘14’ ne correspondent à aucun code de zone ou de service valide).
En électronique numérique, on utilise beaucoup de codes. Chaque système, chaque constructeur (de
composant ou de matériel), chaque organisme de normalisation, etc. invente un ou plusieurs codages.
La seule chose à retenir, c’est qu’il faut avoir en sa possession les conventions de codage. Par
exemple, pour comprendre le langage de programmation d’un microprocesseur, il faut avoir à sa
disposition le manuel décrivant le jeu des instructions de ce composant.
Un nombre représente une valeur. Notre culture est telle que la manipulation des nombres est quasi
naturelle.
Un nombre est la représentation d’une valeur La valeur est représentée au moyen de chiffres écrits de
façon ordonnée. La différence par rapport au code est que chaque chiffre composant le nombre est
porteur d’une valeur. Par exemple, le nombre 421 est composé du chiffre 4 qui représente la valeur
400, du chiffre 2 qui représente la valeur 20 et du chiffre 1 qui représente la valeur 1.
Une même valeur peut être exprimée de différentes façons selon la base de pondération utilisée. On
note (421)10 une valeur exprimée en base 10. La même valeur exprimée en base 3 s’écrit (120121) 3. Il
s’agit bien de la même valeur. Si vous avez 421 € dans votre porte-monnaie, vous avez (421)10 euros,
bien sûr. Vous ne serez pas plus riche (malgré de trompeuses apparences) si vous décidez de compter
en base 3 ; certes vous compterez (120121)3, mais attention, il ne s’agit pas de cent vingt mille cent
vingt et un euros ... il faut plutôt dire « un deux un zéro deux un » euros en base 3.
Un système de numération est muni d’une base et de règles de composition des nombres. Voici
quelques rappels de ces notions.
C’est la base de référence, car il suffit d’analyser comment nous gérons la base dix pour en déduire les
autres bases.
Un nombre est composé de chiffres (digit). Un chiffre est un symbole extrait d’un ensemble ordonné :
la base dix.
Par exemple, N=1989 est l’écriture d’un nombre en base 10, qui sous-entend la décomposition
suivante :
De façon plus générale, les chiffres qui composent le nombre N dans la base 10 sont les coefficients
ai de la décomposition de N en somme de puissances de 10 (forme polynomiale) :
• le rang ‘i’ d’un coefficient ‘ai’ est l’exposant de la puissance de dix qui lui est associée. Dans
l’exemple avec N=1989, a3 = 1 car 1000=1 x 103
. • le chiffre de rang 0, c’est-à-dire le plus à droite, est appelé le chiffre (digit) de plus faible poids
(LSD : Least Significant Digit). Le chiffre le plus à gauche est le chiffre de plus fort poids (MSD :
Most Significant Digit).
Tout nombre entier naturel N peut s’exprimer en base B avec n chiffres ordonnés, sous la forme :
base 2 = { 0,1 }
Une remarque pour commencer : le code binaire naturel est utilisé partout dans les ordinateurs. Mais
attention, l’électronicien ou l’informaticien préfère la base 16 (ou hexadécimale) à la base 2 : on peut
dire que la base 16 est « presque équivalente », car on passe très facilement de la base 16 à la base 2 et
réciproquement (c’est dû au fait que 16 est une puissance de 2). Ce sera donc la base 16 qu’il faudra
manipuler, de préférence à la base 2.
Reprenons notre code binaire naturel, avec un exemple : N2= (1011001) 2. Que vaut ce nombre en
décimal ?
Les chiffres ‘0’ et ‘1’ sont ordonnés de gauche à droite, du MSD au LSD. Le développement de la
forme polynomiale associée fournit la valeur décimale du nombre écrit en binaire :
Remarque :
• la taille d’un nombre binaire (le nombre de chiffres qui le composent) est 3 à 4 fois plus grande qu’en
décimal.
D’où l’intérêt de la base hexadécimale, beaucoup plus compacte que la base binaire et qui s’en déduit
facilement.
• on va tellement utiliser le binaire qu’il faut connaître, au moins, les 10 premières puissances de 2, et
savoir retrouver très vite le code des 8 premiers entiers:
Vocabulaire :
Définition
Un nombre binaire composé de 8 bits s’appelle un octet et peut prendre des valeurs (décimales) de 0
mémoire ensemble peuvent contenir 16 bits (permettant de stocker une valeur entre 0 et 65 535) et
s’appellent parfois « mot binaire », un long mot étant alors quatre cases mémoire, soit 4 octets.
• un chiffre binaire est appelé bit ("binary digit" en anglais) ; en français, "élément binaire" (eb), très
peu utilisé.
• le bit le plus à gauche est appelé le bit de poids fort ou MSB (Most Significant Bit) ; le bit le plus à
droite est le bit de poids faible ou LSB.
• un nombre binaire est souvent appelé "mot binaire" car on le trouve dans un format fixe.
On peut avoir n’importe quel format, mais certains sont des classiques et possèdent même un nom :
Cette notion de format est très importante, car elle est associée à la taille réelle (physique) des mots
binaires que la machine manipule. C’est d’ailleurs le format qui est la caractéristique utilisée pour
classer les microprocesseurs.
• le format étant fixé (p bits par exemple), un nombre N issu d’un comptage, exprimé en binaire
naturel, évolue selon N modulo 2p. Cela signifie qu’il repasse à 0 après être arrivé à 2p -1.
• la séquence des nombres en binaire naturel possède une propriété utile pour sa composition : en
observant la colonne la plus à droite (le LSB, ou rang 0), on voit qu’il y a une alternance de ‘0’ et de
‘1’ ; au rang 1, on trouve une alternance de deux ‘0’ puis de deux ‘1’ ; ainsi de suite : au rang k, il y a
une alternance de 2k symboles ‘0’ et de 2k symboles ‘1’.
• on note aussi que d’une ligne de la séquence à la suivante, c’est lorsque le bit de rang ‘i’ passe de la
valeur ‘1’ à la valeur ‘0’ que le bit de rang ‘i+1’ change d’état.
Ce sera la base la plus utilisée par la suite. On peut considérer que c’est une variante « compacte » du
binaire !
L’ordinateur ne sait calculer qu’en base 2. Malheureusement, l’écriture binaire n’est ni pratique (à
cause de la taille des écritures), ni intuitive (le cerveau humain ne calcule facilement qu’en base 10).
On doit donc souvent effectuer des changements de base entre la base 2 et les bases 8, 10 ou 16.
Le changement de base le plus simple est le passage entre la base 2 et les bases 8 ou 16. En effet, les
valeurs 8 et 16 étant des puissances de 2 (8 = 23 ; 16 = 24), chaque bloc de 3 ou 4 bits correspond à un
symbole octal ou hexadécimal.
• la réduction par 4 du nombre de symboles pour exprimer les nombres binaires (code hexa 4 fois plus
compact).
• les formats des nombres binaires dans les machines étant des multiples de quatre, on peut toujours
utiliser l’hexadécimal.
• le format d’un symbole hexa (4 bits) est aussi celui qui est nécessaire pour exprimer les chiffres
décimaux.
Nous avons parcouru rapidement les trois bases entières dont nous ferons l’usage. A présent, ce sont
les procédés de conversion que nous devons aborder. Encore une fois, l’hexadécimal aura une place de
choix.
L’ordinateur ne sait calculer qu’en base 2. Malheureusement, l’écriture binaire n’est ni pratique (à
cause de la taille des écritures), ni intuitive (le cerveau humain ne calcule facilement qu’en base 10).
On doit donc souvent effectuer des changements de base entre la base 2 et les bases 8, 10 ou 16. Le
changement de base le plus simple est le passage entre la base 2 et les bases 8 ou 16. En effet, les
valeurs 8 et 16 étant des puissances de 2 (8 = 23 ; 16 = 24), chaque bloc de 3 ou 4 bits correspond à un
symbole octal ou hexadécimal.
Pour convertir l’écriture d’un nombre entier naturel de la base 10 en une autre base B, on procède par
divisions entières successives par B. Le reste de chaque division fournit un des coefficients ai
recherchés, le quotient sert à la division entière suivante.
656 = 41 x 16 + 0
41 = 2 x 16 + 9
Ainsi :
Pour obtenir N en binaire, il suffit de faire la conversion (facile) hexadécimal->binaire : chaque digit
hexadécimal est converti en un groupe de quatre bits, d’où :
N = (167957)10 = (101001000000010101)2
Remarque :
Cette technique de division entière marche aussi avec la base 2 pour obtenir directement le code
binaire de N. Ce n’est pas conseillé (car plus long !) : il est toujours préférable de passer par
l’hexadécimal, et de traduire ensuite (si nécessaire !) en binaire.
A l’usage, on se rend compte qu’on utilise très peu l’écriture binaire, car elle est lourde et peut
facilement être remplacée par l’hexadécimal. Dans les langages de programmation tel que le C, la
représentation des nombres en binaire n’existe pas : l’hexadécimal et le décimal sont les seules bases
disponibles.
3 2 5 1 , 2 6
Les caractères, comme les nombres, doivent être représentés en vue d’être exploités par les
ordinateurs.
Comme on ne peut mettre que des bits dans les cases mémoire, on a associé un code numérique à
chaque caractère. Évidemment, pour pouvoir échanger des informations entre ordinateurs, il faut que
cette correspondance soit la même sur toutes les machines.
Code ASCII
La première tentative de standardisation date de la fin des années 60, avec la création du code ASCII
(American Standard Code for Information Interchange). Cette table définit les équivalents numériques
des caractères majuscules et minuscules de l’alphabet latin, des chiffres et de certains signes de
ponctuation. Elle donne également le code de nombreux caractères de contrôle, utilisés à l’époque
dans l’échange de données entre terminaux et ordinateurs ; non imprimables, ils servaient à régler les
paramètres de la communication.
Chaque caractère est codé sur 1 octet par deux symboles hexadécimaux. Le numéro de la colonne
donne le symbole hexadécimal de poids fort et le numéro de ligne le symbole de poids faible. Ainsi, le
caractère 4 a pour code numérique 3416, L le code 4C16 et m le code 6d16.
Code Unicode
À la fin des années 80 démarre un projet visant à codifier de manière unique tous les caractères de
toutes les langues écrites, en tenant compte du sens de lecture des langues (de gauche à droite ou
l’inverse), des ligatures, etc. Ce travail aboutit au codage Unicode dans lequel chaque symbole est
défini sur 2 octets. De portée mondiale, ce codage n’est pas encore universellement appliqué car de
nombreux systèmes et applications ne savent pas encore traiter ces caractères étendus. Le langage de
programmation C, ancien mais très utilisé, code ses caractères sur 1 octet alors que Java les code sur 2
octets et est donc compatible avec Unicode. Notez que dans un souci d’harmonisation, les deux cent
cinquante-cinq premiers caractères Unicode reproduisent les deux cent cinquante-cinq caractères du
codage ISO 8859–1 de l’alphabet latin.
Maintenant que nous savons compter en binaire, nous allons étudier les opérations arithmétiques
classiques. Elles se réalisent de la même manière qu’en décimal.
I.1 Addition
De même que l’on additionne deux nombres décimaux chiffre à chiffre en obtenant un résultat et une
retenue à reporter, pour additionner deux nombres binaires, il faut définir l’addition de 2 bits. Il n’y a
que quatre cas à examiner :
• 1 + 1 donne 0 de résultat et 1 de retenue (de même qu’il y a une retenue lors de l’addition de deux
chiffres décimaux quand le résultat est supérieur à 10).
On effectue ensuite l’addition binaire bit à bit, de droite à gauche, en reportant les retenues, comme
dans l’exemple suivant :
I.2 Soustraction
Le scénario est identique pour la soustraction de deux nombres binaires : la soustraction de 2 bits
donne un bit de résultat et un bit de retenue de report sur la colonne suivante :
On effectue la soustraction binaire bit à bit, de droite à gauche, en reportant les retenues, comme dans
l’exemple suivant :
La multiplication binaire peut s’effectuer comme une suite d’additions successives des produits
partiels, comme une multiplication décimale. Cela dit, elle est plus simple à poser que la multiplication
décimale car les tables de multiplication sont réduites à leur plus simple expression ! On multiplie soit
par 0 (et le résultat est nul) soit par 1 (et on recopie le multiplicateur). Voici un exemple :
Cette manière d’opérer s’implémente facilement car elle consiste à ne faire que des décalages et des
additions, opérations classiques sur les processeurs. L’inconvénient de la multiplication est qu’elle
allonge fortement les nombres : multiplier deux nombres de n bits peut donner un résultat sur 2n bits.
Il faut donc faire attention lorsque ces nombres sont stockés dans une case mémoire car le résultat, de
taille double, peut ne plus tenir dans une case.
I.4 Division
La division binaire est l’opération la plus compliquée. On opère comme en décimal : on soustrait le
diviseur du dividende en commençant par les bits de poids fort. Elle nécessite une série de
soustractions et de décalages pour donner un quotient et un reste.
Nous savons maintenant représenter en binaire des nombres entiers positifs. Mais comment faire pour
travailler avec des nombres négatifs ? Dans l’arithmétique classique, ces nombres sont précédés d’un
signe moins, mais c’est ici impossible car on ne peut mettre que des bits dans une case mémoire. Il
faut donc trouver une écriture, une représentation des nombres négatifs, utilisant les bits disponibles.
Définition
Sur n bits, le bit de poids fort (aussi appelé « bit de signe ») indique le signe du nombre (selon une
convention classique, ce bit est à 1 pour un nombre négatif) et les n – 1 bits restants donnent la valeur
absolue binaire du nombre. Les mots binaires 01011001 = 89 et 10110100 = –52 sont deux exemples
de nombres écrits dans cette représentation sur 8 bits.
Caractéristiques
Notez que l’on ne représente pas plus de nombres ainsi : sur n bits, on représente toujours au
maximum 2n valeurs différentes. Ce que l’on a fait est un décalage de la plage des nombres autorisés
en passant de l’intervalle [0, 2n – 1] à l’intervalle [–(2n – 1 – 1), 2n – 1 – 1]. Il n’y a plus que 2n – 1
nombres exprimés car le zéro peut s’écrire de deux manières différentes : +0, c’est-à-dire 00…0, et –0
qui s’écrit 10…0.
C’est la représentation standard sur les ordinateurs pour exprimer les nombres entiers négatifs. Quand
on parle de représentation signée ou d’entiers signés, ces derniers sont toujours exprimés à l’aide de la
représentation en complément à 2.
Définition
Sur n bits, on exprime les nombres de l’intervalle [–2n – 1, 2n – 1 – 1]. On retrouve bien les 2n nombres
possibles. Un nombre positif est représenté de façon standard par son écriture binaire. On représente
un nombre négatif en ajoutant 1 à son complément à 1 (obtenu en inversant tous les bits) et en laissant
tomber une éventuelle retenue finale.
Si l’on reprend l’exemple précédent, 89 (positif) s’écrit toujours 01011001, mais –52 (négatif) s’écrit
maintenant 11001100. En effet, en binaire sur 8 bits, 52 s’écrit 00110100, ce qui donne un
complément à 1 égal à 11001011 et un complément à 2 égal à 11001100.
Dans le cas d’un nombre négatif, il est important d’indiquer sur combien de bits doit s’écrire le
nombre car on ne rajoute pas des zéros en tête mais des uns (suite à l’inversion obtenue lors du calcul
du complément à 1). La phrase « représentez –20 en complément à 2 » n’a pas de sens si l’on ne
précise pas le nombre de bits de la représentation. Cela peut tout aussi bien être 101100 sur 6 bits que
11101100 sur 8 bits ou 1111111111101100 sur 16 bits.
Les nombres positifs se représentent tels quels, c’est-à-dire par une écriture binaire sur n bits : de 0 =
000…00 à 2n – 1 – 1 = 011…11. Les entiers négatifs correspondent au complément à 2 de ces nombres
: de –2n – 1 = 100…00 à –1 = 111…11. Il n’y a plus maintenant qu’une seule représentation de 0 ;
d’ailleurs, si l’on essaie de prendre l’opposé de 0 = 000…00 en faisant son complément à 2, on
retombe sur la même écriture binaire.
Notez que l’on peut représenter plus de nombres strictement négatifs que de nombres strictement
positifs, en l’occurrence un de plus. C’est parfaitement normal : avec 2 n possibilités sur n bits, si l’on
enlève le zéro, il reste un nombre impair d’écritures possibles ; on ne peut donc pas avoir autant de
nombres positifs que de nombres négatifs. On aurait pu décider, pour le nombre binaire 100…00, de
représenter 2n – 1 au lieu de –2n – 1, mais la convention choisie permet de considérer le bit de poids fort
d’un nombre comme un équivalent de bit de signe : tous les nombres négatifs (de –2n – 1 à –1) ont ce
bit de poids fort à 1 et tous les nombres positifs (de 0 à 2 n – 1 – 1) ont ce bit à 0. Cela permet de
déterminer facilement le signe d’un nombre en représentation signée.
Arithmétique en complément à 2
Le grand intérêt du complément à 2 est de simplifier les additions. Ainsi, on n’a plus à se préoccuper
du signe des nombres avant d’effectuer l’opération. Voici un exemple. Pour effectuer l’addition de 118
et de –36, il suffit d’exprimer chacun des nombres en complément à 2 et d’effectuer l’addition bit à bit
en laissant tomber une éventuelle retenue :
En revanche, la multiplication est plus délicate. La méthode la plus simple est de prendre la valeur
absolue des deux nombres, de les multiplier par l’algorithme standard et de prendre l’opposé du
résultat si les deux nombres étaient de signes contraires. Il existe un autre algorithme, appelé «
recodage de Booth », qui profite des spécificités de la multiplication binaire pour accélérer le calcul au
prix d’une circuiterie plus compliquée.
Pour diviser, il faut passer par la division des valeurs absolues et repositionner les signes du quotient et
du reste si nécessaire.
Note
Propriétés du complément à 2
On a la relation suivante, sur n bits : X + C2(X) = 2n (d’où son nom). Cela permet de calculer
facilement le complément à 2 d’un nombre en effectuant l’opération C2(X) = 2n– X. On a une autre
propriété intéressante : si l’on prend deux fois le complément à 2 d’un nombre, on retombe sur ce
nombre : C2(C2(X)) = X. Ainsi, pour calculer la valeur décimale d’un nombre binaire négatif, il suffit
de prendre son complément à 2 et l’on a son opposé :
VB(10101010) = 170, VS(10101010) = –86 et l’on a bien 170 – (–86) = 256 = 28.
Parfois, on a besoin d’étendre un nombre de n bits sur davantage de bits. Par exemple, pour
additionner un nombre écrit sur 1 octet et un nombre écrit sur 2 octets, il faut étendre le premier
nombre sur 16 bits avant d’effectuer l’addition. Un autre exemple est le chargement d’une case
mémoire de 1 octet dans un registre (une zone de stockage à l’intérieur du microprocesseur) de 4
octets (32 bits). Comment faire pour que le nombre étendu représente bien la même valeur ? On doit
effectuer ce que l’on appelle une extension de signe.
Si le nombre n’est pas signé, il suffit d’ajouter des zéros en tête du nombre à étendre : par exemple
11010011 devient 0000000011010011 sur 2 octets.
Si l’on travaille avec des nombres signés représentés avec la convention « signe et valeur absolue », il
suffit de reporter le bit de signe dans le nouveau bit de poids fort et de remplir les autres nouveaux bits
par des zéros.
Représentation en complément à 2
Pour les nombres signés standard, la règle est de recopier le bit de signe du nombre dans tous les
nouveaux bits. En effet, si le nombre est positif, son bit de signe est nul et on ajoute des zéros en tête :
00100110 devient 0000000000100110 ; si le nombre est négatif, le bit de signe (c’est-à-dire le bit de
poids fort) est égal à un et il faut le reporter : 10001111 devient 1111111110001111. Dans tous les cas,
lorsque l’on calcule la valeur des nombres en complément à 2, on obtient bien le même résultat.
II.4 Débordement
Lorsqu’ils sont stockés en mémoire dans un ordinateur, les nombres binaires ont une taille limitée :
souvent 1, 2 ou 4 octets. Parfois, le résultat d’une opération arithmétique, par exemple d’une addition,
ne peut pas tenir dans la taille imposée. On dit alors qu’il y a débordement (overflow). Comment le
détecter ? Cela dépend bien évidemment de la représentation des nombres.
Sur n bits, on représente les nombres de 0 à 2n – 1. Si la somme de deux nombres dépasse cette valeur,
il y a débordement. On peut facilement s’en apercevoir car cela est équivalent à la présence d’une
retenue finale lors de l’addition. Voici un exemple sur 8 bits :
De la même façon, une soustraction peut amener à un résultat négatif, non représentable avec des
nombres non signés. Là encore, une retenue finale indique un débordement.
Dans les deux cas, le résultat obtenu n’est pas le résultat correct : il y a débordement. Il faut pouvoir le
détecter pour, par exemple, arrêter le calcul.
À cause de la présence des nombres négatifs, une opération peut générer une retenue finale sans qu’il
y ait débordement. Ainsi, l’opération –60 + (–61) donne le résultat attendu :
Il y a bien retenue finale mais le résultat exprimé sur 8 bits est correct.
Il faut en fait comparer les signes des nombres additionnés et le signe du résultat. Les signes des
nombres additionnés correspondant aux bits de poids fort, leur addition génère la retenue finale ; le
signe du résultat est, quant à lui, généré par la dernière retenue (celle qui s’additionne aux bits de poids
fort justement). La règle est simple :
• Si les deux retenues générées par l’addition des deux derniers bits de chaque nombre (ceux de poids
fort) sont identiques (11 ou 00), il n’y a pas débordement.
Dans le premier exemple, les deux dernières retenues valent 1 ; il n’y a donc pas débordement (le
résultat exprimé sur 8 bits est correct). Dans le second, elles valent 0 et 1, ce qui est la preuve d’un
débordement (effectivement, –111 n’est pas le résultat correct de la somme de 77 et 68).
Dans de nombreuses applications, on ne peut se contenter de calculer avec les nombres entiers, soit
parce que l’on a besoin de nombres sortant de l’intervalle de représentation, soit parce que l’on utilise
des nombres décimaux. Comme un ordinateur ne sait manipuler que des bits, il faut définir une
représentation des nombres décimaux adaptée aux calculs. L’espace de stockage d’un nombre (son
L’idée principale derrière la représentation des nombres décimaux est de définir l’emplacement d’une
virgule séparant la partie entière et la partie décimale et de considérer que les bits à droite de cette
virgule correspondent aux puissances négatives de 2 (de même qu’en décimal, les chiffres à droite de
la virgule sont des dixièmes, des centièmes…).
Historiquement la première, la représentation en virgule fixe est facile à comprendre. Au lieu de faire
commencer les puissances de 2 à 20 au bit de poids faible, comme pour les nombres entiers, on fixe un
bit, quelque part dans l’écriture du nombre, à droite duquel se place la virgule. Les bits à gauche de la
virgule correspondent alors aux puissances de 2 positives et les bits à droite de la virgule
correspondent aux puissances de 2 négatives.
Ainsi, sur n bits, on peut par exemple définir une virgule après les p bits de poids faible, ce qui donne,
pour le nombre xn -p–1xn–p–2 … x1x0x–1 … x–p, la valeur :
Le problème évident est que la plage des nombres représentables est assez limitée. On est entre 2 –p et
2n – p– 2–p, avec peu de précision après la virgule. Pour y remédier, on a développé une autre
représentation, appelée « représentation en virgule flottante ».
Il s’agit maintenant d’imiter ce que l’on appelle la notation scientifique. On va écrire le nombre voulu
sous la forme ±1,M × 2E, où 1,M s’appelle la mantisse du nombre et E l’exposant. Comme la mantisse
commence toujours par une partie entière égale à 1, on ne l’écrit pas et on n’exprime que la partie
fractionnaire, M, appelée « pseudo-mantisse ».
Puisqu’il y a plusieurs manières d’écrire les différents champs, une normalisation a été adoptée qui
définit deux principaux types de nombres en virgule flottante : la simple précision sur 32 bits et la
double précision sur 64 bits. Les nombres en simple précision possèdent une pseudo-mantisse sur 23
bits (correspondant aux puissances négatives de 2, de 2–1 à 2–23), un exposant sur 8 bits et un bit de
signe. Les nombres en double précision ont une pseudo-mantisse sur 52 bits, un exposant sur 11 bits et
un bit de signe.
Voici trois exemples : 500= 1,953125× 28 = (1+ 2−1+ 2−2+ 2−3+ 2−4+ 2−6)× 28
Cela donne 1 10000000 11000000000000000000000. On a un bit de signe égal à 1 car le nombre est
négatif, un exposant égal à 1 + 127 et les premiers bits de la pseudo-mantisse qui exprime 0,75.
Remarque
Par analogie avec les nombres entiers, on désigne souvent les « nombres représentés en virgule
flottante » comme des « nombres flottants ».
Valeurs spéciales
La plage de représentation est à peu près de 10–38 à 1038 en simple précision et de 10–308 à 10308 en
double précision. Certaines configurations de bits signifient des valeurs spéciales :
Les valeurs de plus ou moins l’infini peuvent apparaître dans les calculs, et les règles arithmétiques
correspondantes sont précisées dans la norme. Les nombres dénormalisés permettent d’exprimer un
nombre encore plus petit que 10–38 en écrivant la mantisse 0,M plutôt que 1,M. Enfin les NaN
signalent une erreur (division par zéro par exemple).
Arrondis
En raison du nombre limité de bits de la représentation, les calculs en virgule flottante ne peuvent pas
atteindre une précision infinie. Tous les nombres réels ne sont pas représentables et l’un des enjeux de
la normalisation a été que les calculs soient reproductibles d’une machine à une autre. Or, en raison de
la précision limitée, ceux-ci ne peuvent pas être systématiquement exacts. On a donc défini des
mécanismes standard d’arrondi pour être sûr de toujours parvenir au même résultat. Ces mécanismes
d’arrondi sont au nombre de quatre :
Les calculs sont ici beaucoup plus compliqués qu’en arithmétique entière. Du fait que les bits des
nombres ont des significations différentes suivant leur place, il faut traiter séparément les différents
champs. Voici à titre d’exemple les algorithmes pour la multiplication et l’addition.
2. Additionner les exposants en soustrayant une fois le biais pour retomber sur un exposant biaisé.
La multiplication des mantisses (il faut multiplier 1,112 par 1,012, et pas uniquement les pseudo-
mantisses) donne 10,00112 et l’addition des exposants aboutit à un exposant biaisé de 128. On décale
la mantisse vers la droite (en ajoutant 1 à l’exposant) pour renormaliser le nombre en 1,00011 2 × 22,
qui s’écrit alors 0 10000001 00011000000000000000000. Cela donne bien (1 + 2–4 + 2–5) × 22
= 4,375.
La division flottante s’effectue de façon semblable : on divise les mantisses et on soustrait les
exposants.
L’addition de deux nombres flottants ne peut se faire que si les exposants sont égaux. L’algorithme est
le suivant :
4. Arrondir la mantisse (car, à cause du décalage initial, la mantisse peut être sur plus de bits que la
taille autorisée).
Comme précédemment, 1,75 se représente ainsi : 1,112 × 20, et 2,5 de la façon suivante : 1,012 × 21
. On décale le premier nombre en l’écrivant 0,1112 × 21 pour aligner les exposants. L’addition des
deux mantisses donne 1,012 + 0,1112 = 10,0012. On normalise en décalant vers la droite et en ajoutant
1 à l’exposant, ce qui amène à un résultat égal à 1,00012 × 22, soit 4,25.
Le transistor, un interrupteur commandé par une tension, est le composant de base des circuits
électroniques au cœur de l’ordinateur. À l’aide des transistors, on construit des circuits logiques
élémentaires, des portes logiques, effectuant des opérations simples. Ces circuits sont analysés grâce à
l’algèbre de Boole, outil mathématique puissant qui permet de développer des circuits plus complexes.
Ces mêmes portes logiques sont utilisées pour réaliser des circuits séquentiels, faisant intervenir une
composante temporelle et introduisant ainsi la notion de mémorisation de valeurs dans les systèmes.
Ces fonctions de base peuvent être définies par leur table de vérité ou leur expression algébrique, mais
elles ont également été implémentées sous forme de circuits électroniques, appelés « portes logiques »
(de l’anglais gate), qui ont des symboles graphiques normalisés.
Deux principales normes existent pour représenter ces portes de base : la première, la plus ancienne,
affecte une forme géométrique différente à chacune des fonctions. La seconde dessine chacun des
circuits sous une forme rectangulaire et les distingue via un symbole placé à l’intérieur du rectangle ;
elle permet alors de représenter beaucoup plus de circuits différents. Nous présentons ici, pour chaque
porte, les deux symboles, mais nous utiliserons ensuite la nouvelle norme.
Les fonctions et les circuits logiques étant souvent définis à partir d’expressions algébriques, il est
important de pouvoir simplifier celles-ci afin de réduire la complexité des circuits. À cet effet, un
certain nombre propriétés algébriques peuvent être obtenues à partir des définitions des fonctions.
Pour prouver ces égalités, il suffit d’écrire les tables de vérité de chaque expression et de constater
qu’elles sont identiques.
Remarque
Dans les expressions algébriques, l’opérateur ET est prioritaire sur l’opérateur OU. On peut donc
souvent enlever les parenthèses et écrire ab + c plutôt que (ab) + c.
Les lois de De Morgan sont très importantes car elles permettent de transformer un opérateur en un
autre dans une expression algébrique. On peut donc, dans une expression, remplacer tous les
opérateurs OU par des opérateurs ET (ou vice-versa). L’intérêt est par exemple de pouvoir choisir
l’opérateur utilisé pour construire la fonction à partir de son expression, selon des portes logiques
disponibles.
La propriété d’associativité permet de définir les opérateurs ET, OU, NON-ET et NON-OU à plus de
deux entrées :
• La fonction NON-ET donne un résultat égal à 1 si au moins une de ses entrées est à 0.
Les schémas des circuits sont comparables qu’il y ait deux entrées ou plus : on ajoute simplement
autant de lignes que de variables d’entrée supplémentaires.
Le OU-exclusif peut également se généraliser à plus de deux entrées mais cela est beaucoup moins
classique.
Un circuit OU-exclusif à n entrées fournit une sortie égale à 1 s’il y a un nombre impair d’entrées qui
ont la valeur 1.
Une fonction booléenne est entièrement définie par sa table de vérité mais cela n’est pas d’une grande
aide
Soit une fonction définie par sa table de vérité, par exemple la fonction de trois variables suivante :
1- Méthode algébrique
2- Méthode de Karnaught