Médaille
N°1 pour apprendre & réviser du collège au lycée.

Une machine à calculer : l'octet

Déjà plus de

1 million

d'inscrits !

Les premières épreuves du bac de français édition 2023 sont pour bientôt ! Consulte le calendrier des épreuves de français, notre programme de révision accompagné de toutes nos fiches de révisions pour te préparer au mieux à ton examen 💪

Introduction :

Nous avons vu dans le cours précédent que les ordinateurs utilisaient le système de numération binaire pour représenter les nombres entiers. Nous allons creuser cette question dans ce cours, qui sera très arithmétique.

Nous allons découvrir quelques notions nécessaires pour comprendre comment un ordinateur manipule les nombres, telles que la taille d’un entier ou l’octet. Nous parlerons du système hexadécimal, nous verrons comment traiter les nombres relatifs, et nous discuterons d’une erreur informatique courante : le dépassement d’entier.

Du bit à l’octet

bannière rappel

Rappel

On appelle bit une unité d’information binaire (00 ou 11). Dans le système binaire, un nombre entier est codé avec des bits.

Taille d’un entier

Dans le système décimal, avec xx chiffres, on peut représenter 10x10^x nombres différents. Par exemple, avec 4 chiffres, on peut représenter 104=1000010^{4}=10\,000 nombres (de 00000000 à 99999999).

bannière propriete

Propriété

Avec xx bits, on peut représenter 2x2^x nombres différents.

Avec 44 bits par exemple, on peut donc représenter 242^4, soit 16 nombres (de 00000000 à 11111111, qui signifie 15 en binaire).

bannière definition

Définition

Taille d’entier :

En informatique, la taille d’un entier est le nombre de bits avec lequel celui-ci est codé.

Selon le système informatique ou le programmeur, on choisira de coder une donnée de type entier avec un nombre nn fixé de bits. Ce nombre de bits limite donc la valeur que peut prendre la donnée à un maximum qui correspondra à 2n12^{n}-1.

bannière exemple

Exemple

Par exemple, si l’on choisit de coder une donnée de type entier sur 44 bits, celle-ci pourra prendre la valeur 33, car 33 peut être codé en binaire avec 44 bits (0011)(0011).

En revanche, cette même donnée ne pourra pas prendre une valeur strictement supérieure à 1515, car les entiers au-delà de cette limite nécessitent plus de 44 bits pour être codés en binaire. En effet, 1515 est codé sur 44 bits (1111)(1111), 1616 (codé 1000010000) et les nombres supérieurs le sont sur 55 bits ou plus.

bannière propriete

Propriété

Pour évaluer le nombre de bits nécessaires pour coder un entier, on cherche la plus petite puissance de deux dont la valeur est strictement supérieure à cet entier (voir le cours précédent pour la représentation d’un entier en binaire).

bannière exemple

Exemple

Le nombre 614614 est plus grand que 29=5122^{9} = 512 et plus petit que 210=10242^{10} = 1024.
Il faudra donc au moins 1010 bits pour coder ce nombre.

En effet, son codage en binaire est 100110011010\,0110\,0110.

bannière à retenir

À retenir

Dans un système informatique donné, les entiers sont souvent codés avec une taille standard (souvent 88, 1616, 3232 ou 6464 bits). Plus cette taille sera grande, plus les calculs pourront être précis, mais ils nécessiteront aussi plus de ressources (que ce soit tant en ressource de calcul, en espace mémoire qu’en stockage disque).

Octet

La taille d’un entier peut être exprimée en bits, mais il est bien plus courant de l’exprimer en octets.

bannière definition

Définition

Octet :

Un octet est un groupe de 88 bits. Le mot vient de la racine latine octo qui veut dire 88.

On peut représenter 256256 entiers avec un octet (de 00 à 255255). Les tailles d’entiers standards (88, 1616, 3232 ou 6464 bits) correspondent respectivement à 11, 22, 33 ou 44 octets.

bannière à retenir

À retenir

L’octet est l’unité de mesure la plus utilisée pour la taille d’une information (pas seulement d’un entier).
Ainsi, on mesure souvent la taille d’un fichier en kibioctets (Kio)(\text{Kio}), mébioctets (Mio)(\text{Mio}) ou gibioctets (Gio)(\text{Gio}). De même, le débit d’une transmission d’informations peut être mesuré en Kio\text{Kio}, Mio\text{Mio} ou Gio\text{Gio} par seconde : Kios1\text{Kio}\cdot\text{s}^{-1}, Mios1\text{Mio}\cdot\text{s}^{-1}, Gios1\text{Gio}\cdot\text{s}^{-1}.

bannière rappel

Rappel

Ki\text{Ki} correspond à 101010^{10}
Mi\text{Mi} à 102010^{20}
Gi\text{Gi} à 103010^{30}
Ti\text{Ti} à 104010^{40}

Le système hexadécimal

bannière definition

Définition

Système hexadécimal :

Le système hexadécimal est un système de numération en base 1616, c’est-à-dire qu’il utilise 16 chiffres pour représenter les entiers, de 00 à 99 puis de A\text{A} à F\text{F}.

Nous avons donc les correspondances suivantes :

Hexadécimal AA BB CC DD EE FF
Décimal 1010 1111 1212 1313 1414 1515
  • On note parfois la base d’un nombre en indice après celui-ci, tels que nombres\text{nombre}_s.

Ainsi, 102102 est un nombre codé en binaire, 101010{10} un nombre codé en décimal, et 101610_{16} un nombre codé en hexadécimal.
Il existe une autre notation : pour signifier qu’un nombre est exprimé avec le système hexadécimal, on lui accole le préfixe 0x0\text{x} (c’est la lettre « x\text{x} » et non un signe de multiplication). Le préfixe 0b0\text{b} indique que le nombre est exprimé avec le système binaire.

L’intérêt du système hexadécimal, pour un informaticien, est qu’il possède la propriété suivante :

bannière propriete

Propriété

On peut représenter les nombres de 00 à 1515 avec un caractère en hexadécimal, soit autant qu’avec quatre bits en binaire.
Autrement dit, on peut représenter un octet avec deux caractères hexadécimaux. Ainsi, l’écriture d’un nombre en hexadécimal peut se voir comme une écriture condensée du binaire, puisque l’on utilise deux caractères hexadécimaux pour représenter un octet qui tient sur 88 bits, soit 4 fois plus de caractères

Pour passer le codage d’un entier du binaire à l’hexadécimal, il suffit de remplacer chaque groupe de 44 bits par le caractère correspondant, et vice-versa. Pour passer du décimal à l’hexadécimal ou l’inverse, le plus simple est encore de passer par le binaire, même s’il y existe d’autres méthodes.

bannière exemple

Exemple

Prenons le nombre 421042{10}, c’est-à-dire 0010101020010\,10102.
Puisque 00102=2=0x20010{2}=2=0\text{x}2
et 10102=10=0xA1010
{2}=10=0\text{xA}
alors 001010102=0x2A0010\,1010_{2}=0\text{x}2\text{A}.

Le tableau suivant donne une correspondance entre plusieurs systèmes de numération pour différents entiers :

Décimal Binaire (88 bits) Hexadécimal
55 000001010000\,0101 0x050\text{x}05
1515 000011110000\,1111 0x0F0\text{x}0\text{F}
4242 001010100010\,1010 0x2A0\text{x}2\text{A}
100100 011001000110\,0100 0x640\text{x}64
255255 111111111111\,1111 0xFF0\text{x}\text{FF}

Entiers relatifs

La plupart des systèmes informatiques qui codent des entiers le font sous forme d’entiers relatifs, il faut donc un moyen de représenter le signe (positif ou négatif) des entiers.

Représentation naïve

bannière definition

Définition

Bit de signe :

Dans le codage d’un entier relatif, le bit de signe est un bit qui vaut 00 si l’entier est positif ou 11 s’il est négatif.

On pourrait coder un entier relatif comme un entier naturel, mais avec un bit qui indiquerait son signe. Par exemple, le bit le plus à gauche, qu’on appelle aussi bit de poids le plus fort, alors que le bit le plus à droite est appellé le bit de poids le plus faible.

Par exemple, on aurait 000000010000\,0001 qui vaudrait 11 et 100000011000\,0001 qui vaudrait 1-1. C’est quelque chose qui est rarement fait, et ce, pour deux raisons principales :

  • D’abord, parce que le 00 aurait deux représentations : 000000000000\,0000 vaudrait +0+0 et 100000001000\,0000 vaudrait 0-0. Ce n’est pas très grave, mais c’est peu élégant.
  • Surtout, parce qu’il est difficile de trouver des algorithmes simples pour additionner ou soustraire des nombres représentés ainsi. Or, c’est ce que l’on va principalement demander à l’ordinateur de faire avec ces nombres.
  • Voilà pourquoi on utilise plutôt une autre représentation, que l’on appelle complément à deux.

Le complément à deux

bannière definition

Définition

Complément à un :

Le complément ou complément à un d’un nombre binaire est le nombre obtenu en remplaçant chaque 00 par un 11 et chaque 11 par un 00.

bannière exemple

Exemple

  • Le complément à un de 10111011 est 01000100.
  • Le complément à un de 01100110 est 10011001.
bannière definition

Définition

Complément à deux :

Le complément à deux d’un nombre binaire est le nombre obtenu en prenant son complément et en lui ajoutant 11.

bannière exemple

Exemple

  • Le complément à deux de 10111011 est 01010101 : le complément à un de 10111011 est 01000100 et 01000100 auquel on ajoute 11 donne 01010101.
  • Le complément à deux de 01100110 est 10101010 : le complément à un de 01100110 est 10011001 et 10011001 auquel on ajoute 11 donne 10101010.

La plupart des systèmes d’information modernes codent les nombres entiers relatifs avec le système du complément à deux, où l’opposé d’un nombre est codé par son complément à deux.

  • Dans ce système, le bit le plus à gauche est toujours le bit de signe.
bannière exemple

Exemple

Dans un système de complément à deux à 44 bits, on a :

00000000 00  \  \
00010001 11 11111111 1-1
00100010 22 11101110 2-2
00110011 33 11011101 3-3
01000100 44 11001100 4-4
01010101 55 10111011 5-5
01100110 66 10101010 6-6
01110111 77 10011001 7-7
 \  \ 10001000 8-8

On peut constater que le bit de gauche vaut 00 dans la codification des entiers positifs, tandis qu’il vaut 11 dans celle des entiers négatifs.

Dans un système de complément à deux, l’addition et la soustraction fonctionnent de la même manière que pour l’addition d’entiers naturels, à la seule différence qu’il faut ignorer l’éventuel dépassement dû à la dernière retenue.

bannière exemple

Exemple

On voit dans le tableau précédent que, par exemple,

  • 1100+0011=11111100 + 0011 = 1111 (soit 4+3=1-4 + 3 = -1).
  • 1101+0101=100101101 + 0101 = 1\,0010, ce qui donne 00100010 en ignorant le dépassement (soit 3+5=2-3 + 5 = 2).

Dans un système de complément à deux, un entier relatif codé sur nn bits peut valoir entre 2n112^{n-1}-1 et 2n1-2^{n-1}. Voir le tableau suivant :

Entier naturel Entier relatif en complément à deux
88 bits de 00 à 255255 de 128-128 à 127127
1616 bits de 00 à 6553565\,535 de 32768-32\,768 à 3276732\,767
3232 bits de 00 à 4,24,2 milliards de 2,1-2,1 à 2,12,1 milliards
6464 bits de 00 à 1,8×10191,8\times10^{19} de 9×1018-9\times-10^{18} à 9×10189\times10^{18}

Des entiers trop grands

Taille du résultat d’une opération

On peut estimer la taille du résultat d’une opération sur les entiers.

bannière propriete

Propriété

Soit deux entiers naturels dont l’expression en binaire nécessite au plus nn bits et mm bits (respectivement).

  • La somme de ces entiers nécessite pour son expression binaire au plus max(n,m)+1\text{max}(n, m) + 1 bits.
  • Le produit de ces entiers nécessite pour son expression binaire au plus n+mn+m bits.
bannière demonstration

Démonstration

  • Pour la somme, on peut l’observer comme une conséquence de la manière dont les additions sont posées : le nombre de « colonnes » est égal au nombre de bits du nombre additionné le plus grand, et une colonne supplémentaire est nécessaire s’il y a une retenue sur la dernière colonne.
  • Pour le produit, on peut aussi l’observer comme une conséquence de la manière dont sont posées les multiplications.

Cette propriété n’est en réalité pas spécifique au système binaire : elle est vraie pour les additions et les multiplications dans n’importe quel système de numération.

Dépassement d’entier

bannière definition

Définition

Dépassement d’entier :

On appelle dépassement d’entier (integer overflow) l’erreur informatique qui se produit quand le résultat d’un calcul est un entier trop grand pour la taille qui lui a été attribuée. Le système informatique est alors incapable d’écrire le résultat correctement.

On a vu que les valeurs prises par une donnée entière codée selon 88, 1616, 3232 ou 6464 bits ne pouvait pas dépasser une limite inférieure, ni une limité supérieure. Ainsi, si le résultat d’un calcul venait à dépasser l’une de ces limites, celui-ci ne pourrait pas être codé par le calculateur. Selon le système informatique, un dépassement d’entier peut être plus ou moins grave : un programme bien conçu peut prévoir cette possibilité et établir une marche à suivre si un tel cas ce produit. Parfois, les limites techniques du calculateur font du dépassement d’entier un problème critique.

bannière exemple

Exemple

Il est possible de provoquer un dépassement d’entier sur une calculatrice ordinaire : si on lui demande de réaliser un calcul dont le résultat trop grand est impossible à coder, elle affiche un message d’erreur.

Bien que le dépassement d’entier soit une erreur informatique très connue et courante, il est déjà arrivé que des erreurs de conception mènent à de véritables catastrophes à la suite de dépassements d’entier.

bannière exemple

Exemple

L’échec du vol inaugural du lanceur d’engin spatial européen Ariane V\text{V}, en 1996, est l’exemple le plus célèbre. Le système de guidage électronique, très fiable sur les précédents lanceurs, n’avait pas été re-testé. Mais il n’avait pas été prévu pour calculer des vitesses aussi grandes que celles de cette nouvelle fusée. Un dépassement d’entier a provoqué un dysfonctionnement : le système « corrigea » la trajectoire de la fusée en lui faisant prendre un virage de 90°, la mettant à l’horizontale ; elle commença à se désagréger. Le mécanisme d’autodestruction se déclencha alors, et la fusée explosa au-dessus de la base spatiale de Kourou.

Entiers de taille arbitraire

Pour permettre des calculs sur les valeurs élevées, les langages de programmation proposent souvent des types d’entier spécifiques.

bannière definition

Définition

Entier de taille arbitraire :

Un entier de taille arbitraire est un entier dont la taille n’est pas fixée dans le système d’information pouvant évoluer jusqu’aux limites physiques du système informatique.

bannière exemple

Exemple

Dans le langage Python, un entier peut être défini comme de type integer (int) ou long integer (long).

  • Les integer sont codés sur 44 octets (soit 3232 bits) avec le système de complément à deux ; il est donc possible qu’un dépassement d’entier ait lieu si on essaye de leur affecter une trop grande valeur.
  • Les long integer sont de taille arbitraire : Python peut leur attribuer une taille virtuellement infinie (pour peu que l’espace de stockage physique soit suffisant).

Sachant que manipuler un long integer est plus coûteux en temps et en ressources que de manipuler un integer, la plupart du temps, les programmeurs utilisent le type in lorsqu’ils savent que l’entier en question ne dépassera pas une certaine valeur.

Conclusion :

Nous avons donc vu ensemble plusieurs concepts utiles à la compréhension de la manière dont les nombres entiers sont manipulés par les ordinateurs.
Dans le prochain cours, nous avancerons dans notre histoire de l’informatique en nous intéressant à l’apparition des premiers ordinateurs électroniques. Nous étudierons également comment coder en binaire les nombres réels et les textes.