Leçon
La théorie — Mémoire et octets : boutisme, types et adresses
Un octet contient huit bits et représente une valeur de 0 à 255. Chaque adresse mémoire en contient un. Un nombre qui occupe plusieurs octets utilise des adresses consécutives : quatre pour un entier sur 32 bits. Le boutisme désigne l'ordre de ces octets. En ordre petit-boutiste, l'octet de poids faible se trouve à l'adresse la plus basse ; en ordre grand-boutiste, c'est l'octet de poids fort. Lus comme un entier non signé, quatre octets donnent b₀·256⁰ + b₁·256¹ + b₂·256² + b₃·256³, où bₖ est l'octet de rang k. Une lecture signée soustrait 2³² si cette somme est supérieure ou égale à 2³¹. Une lecture comme nombre flottant décode ces mêmes bits selon la norme IEEE 754.
Ce que signifie chaque symbole
bₖ- l'octet de rang k, de 0 (poids faible) à 3
256ᵏ- son poids : 1, 256, 65 536 ou 16 777 216
- Suppose
- Les entiers signés sont représentés en complément à deux et les nombres flottants au format IEEE 754 en simple précision, comme sur tous les processeurs actuels d'ordinateurs de bureau et de téléphones. Pour le texte, chaque caractère occupe un octet selon le codage ASCII. Le codage UTF-8, utilisé aujourd'hui par la plupart des fichiers, peut occuper jusqu'à quatre octets pour un seul caractère.
Problème entièrement résolu
-
Quelles sont les dimensions de cette image ? 4 étapes
Cliquez sur En-tête PNG. Vous voyez les 24 premiers octets d'un fichier PNG. La spécification PNG impose l'ordre grand-boutiste pour tout entier qui occupe plus d'un octet. Elle précise aussi que le bloc IHDR commence par la largeur, puis la hauteur, chacune sur quatre octets. Trouvez ces dimensions, puis calculez celles qu'obtiendrait un programme en les lisant dans l'ordre petit-boutiste.
Ouvrez ce problème dans l'outil
-
Le fichier commence par une signature de huit octets : 89 50 4E 47 0D 0A 1A 0A. Les quatre octets suivants indiquent la longueur du premier bloc en ordre grand-boutiste : 00 00 00 0D vaut 13. Vient ensuite son type, 49 48 44 52, qui se lit IHDR en texte. Les données du bloc commencent donc à l'adresse 16.
-
La largeur occupe les adresses 16 à 19 : 00 00 01 E0. En ordre grand-boutiste, 01 reçoit le poids 256¹ et E0, soit 224, le poids 256⁰ : 256 + 224 = 480. La lecture à l'adresse 16 dans l'outil donne le même résultat.
-
La hauteur occupe les adresses 20 à 23 : 00 00 01 0E, soit 256 + 14 = 270.
-
En ordre petit-boutiste, le dernier octet reçoit le poids le plus fort. La largeur donnerait 224 × 256³ + 1 × 256² = 3 758 161 920 et la hauteur, 14 × 256³ + 256² = 234 946 560.
Réponse
480 × 270 pixels. Lus en ordre petit-boutiste, les mêmes octets donnent 3 758 161 920 × 234 946 560, soit environ 8,83 × 10¹⁷ pixels. À raison de quatre octets par pixel, cela représente 3,53 × 10¹⁸ octets. L'ordre des octets est défini par la spécification, sans être indiqué dans le fichier ; le programme doit donc le connaître.
-
Parcours
Comment un ordinateur exécute un programme
Références (2)
- Where the names little-endian and big-endian come from, and the date the first insight gives: Danny Cohen, "On Holy Wars and a Plea for Peace." Internet Experiment Note IEN 137, 1 April 1980.
- The worked problem's file: the signature bytes, network byte order for every multi-byte integer, and the IHDR fields in order: W3C, "Portable Network Graphics (PNG) Specification (Third Edition)." W3C Recommendation, 24 June 2025.