# Octet

| 1 | 0 | 1 | 0 | 0 | 0 | 1 | 1 |
| Écriture dans un octet de 2$^7$ + 2$^5$ + 2$^1$ + 2$^0$, c'est-à-dire 163, en code binaire naturel. ||||||||
En informatique, un octet est un multiplet de 8 bits codant une information. Dans ce système de codage s'appuyant sur le système binaire, un octet permet de représenter 2$^8$ nombres, soit 256 valeurs différentes. Un octet permet de coder des valeurs numériques ou jusqu'à 256 caractères différents.
Le terme est couramment utilisé comme unité de mesure en informatique (symbole : o) pour indiquer la capacité de mémorisation des mémoires (mémoire vive ou morte, capacité des périphériques de stockage, etc.). À cette fin, on utilise couramment des multiples de l'octet, comme le kilooctet (Ko ou ko)$^,$$^,$, le mégaoctet (Mo), le gigaoctet (Go) ou le téraoctet (To).
Cette unité permet aussi de quantifier la rapidité de transfert d'informations en octets par seconde (ou ses multiples : Ko/s, Mo/s, etc.).

## Étymologie

Le mot octet est constitué du préfixe « oct- » signifiant huit et du suffixe « -et » signifiant petit. Littéralement un octet est un groupe de 8 bits qui permettent de coder 256 caractères différents, ce qui est largement suffisant pour coder l'alphabet latin (y compris les différents types d'accents), les chiffres et la ponctuation. La langue anglaise a repris ce terme avec la même orthographe et la même signification.

## Historique

La quantité de bits que le processeur doit consommer pour exécuter une instruction machine est appelé le mot, sa taille est définie par le constructeur. Aux origines de l'informatique, les processeurs étant limités, ceux-ci consommaient ce mot par petites « bouchées », correspondant au nombre de bits du bus de données. C'est ainsi que le terme Byte est créé en 1956 par Werner Buchholz alors qu'il travaille à la conception de l'IBM Stretch. C'est une déformation orthographique volontaire de l'anglais bite, littéralement « bouchée », pour éviter toute confusion avec bit par élision du e final.
Le byte était également l'unité de stockage permettant de stocker un caractère. En anglais, on utilise fréquemment le mot « char » (abréviation de character) pour « byte », et réciproquement. Chaque constructeur définissait la taille du byte en fonction de ses besoins du moment. Dans les années 1950 et 1960, le byte était souvent composé de 6 bits, car tous les caractères nécessaires à la programmation en langue anglaise pouvaient être codés avec six bits (64 possibilités). Le byte pouvait aussi avoir une taille de 9 bits sur d'autres systèmes. Le PDP-10 avait encore une autre définition du byte avec une taille variable, allant de 1 à 36 bits selon l'instruction machine à exécuter.
Dans la plupart des architectures matérielles, la capacité de la mémoire informatique est généralement exprimée en bytes, alors que sur les architectures « grand public » en français, on l'exprime en octets. La généralisation des bytes de huit bits amplifie cette confusion, en tirant un trait sur les architectures anciennes − essentiellement nord-américaines. On trouve beaucoup de documentation en français exprimant improprement la capacité de mémoire en bytes par une confusion bytes/octets lors de la traduction.
Aujourd'hui, pour le Dictionnaire du multimédia – Audiovisuel, informatique, télécommunications de l'AFNOR, le byte est « l'unité d'information correspondant à un octet, soit 8 bits ». La normalisation IEC 80000-13 va dans le même sens : normaliser la taille des bytes à 8 bits. C'est de cette « normalisation » à 8 bits que vient la confusion.
Toutefois, en anglais comme en français, si l'on veut explicitement désigner une quantité de huit bits, on utilise le mot « octet » ; tandis que si l'on veut exprimer l'unité d'adressage indépendamment du nombre de bits, on utilise le mot « byte ». Ainsi la description formelle d’un langage de programmation utilisera sciemment le mot byte si le langage ne nécessite pas qu’un byte ait une taille d’un octet. C’est par exemple le cas du langage C, où un byte peut contenir plus de huit bits. Le mot « octet » est sciemment utilisé en français comme en anglais pour décrire un format de données au bit près. Ainsi, on trouve le mot « octet » dans des textes anglais comme le RFC 793 qui décrit le protocole de communication TCP d'Internet, ou dans le standard H.263 qui décrit une norme de codage vidéo numérique.
La même distinction entre « byte » et « octet » existe donc dans les deux langues, seul change le mot que l'on utilise couramment dans les cas où le byte mesure huit bits.

## Symbole

Le symbole de l'octet est la lettre « o » minuscule.
La lettre « O » (en majuscule) n'est pas acceptable dans le Système international d'unités (SI) en raison du risque de confusion avec le chiffre 0 et parce que les lettres majuscules sont en général utilisées pour les symboles des unités dérivées d'un nom propre (par exemple : volt dont le symbole est V, ou watt dont le symbole est W). Cette question n'est cependant pas tranchée, les unités d'information ne faisant pas partie du SI.
Les autres langues utilisent généralement comme symbole le B anglophone, même si un équivalent local du mot « octet » existe.

## Multiples

Multiples de l'octet : préfixes binaires :
| Nom | Symbole | Valeur |
| kibioctet | Kio | 2$^{10}$ |
| mébioctet | Mio | 2$^{20}$ |
| gibioctet | Gio | 2$^{30}$ |
| tébioctet | Tio | 2$^{40}$ |
| pébioctet | Pio | 2$^{50}$ |
| exbioctet | Eio | 2$^{60}$ |
| zébioctet | Zio | 2$^{70}$ |
| yobioctet | Yio | 2$^{80}$ |
Multiples de l'octet : préfixes décimaux du SI et mésusages :
| Nom | Symbole | Valeur | Mésusage |
| kilooctet | ko | 10$^3$ | 2$^{10}$ |
| mégaoctet | Mo | 10$^6$ | 2$^{20}$ |
| gigaoctet | Go | 10$^9$ | 2$^{30}$ |
| téraoctet | To | 10$^{12}$ | 2$^{40}$ |
| pétaoctet | Po | 10$^{15}$ | 2$^{50}$ |
| exaoctet | Eo | 10$^{18}$ | 2$^{60}$ |
| zettaoctet | Zo | 10$^{21}$ | 2$^{70}$ |
| yottaoctet | Yo | 10$^{24}$ | 2$^{80}$ |
| ronnaoctet | Ro | 10$^{27}$ | 2$^{90}$ |
| quettaoctet | Qo | 10$^{30}$ | 2$^{100}$ |
Historiquement, dans le monde informatique, les préfixes « kilo », « méga », « giga », etc. ne représentaient pas une puissance d'un nombre en base dix (10$^3$ = 1 000), mais une puissance d'un nombre en base 2 (2$^{10}$ = 1 024). Cependant, cette tradition n'était pas compatible avec les normes en vigueur pour les autres unités et n'était pas appliquée uniformément aux tailles exprimées en octets, notamment pour la mesure de la capacité des disques durs et autres périphériques de stockage. Une nouvelle norme a donc été créée en 1998 pour noter les multiples de 2$^{10}$ = 1 024$^,$ : les « kibi », « mébi », « gibi », etc..
Cependant, encore actuellement, pour des raisons pratiques, nombre de constructeurs de matériels (microprocesseurs, microcontrôleurs, mémoires, FPGA, etc.) n'appliquent pas cette norme et continuent d'utiliser les multiples historiques dans leur documentation technique. Il est notamment toujours d'usage d'utiliser le préfixe « K » (en majuscule) pour le multiple 1 024 afin de le distinguer du multiple 1 000 représenté par le préfixe « k » (en minuscule) dans le système SI. Il n'existe pas de notation alternative équivalente pour Mo, To, Go… qui lèverait l'ambiguïté par rapport à la notation SI.

### Multiples normalisés

La normalisation des préfixes binaires en 1998 par la Commission électrotechnique internationale spécifie les préfixes suivants pour représenter les multiples calculés en puissances de 2 :
* kibi pour « kilo binaire » ;
* mébi pour « méga binaire » ;
* gibi pour « giga binaire » ;
* tébi pour « téra binaire » ;
* ainsi de suite.
Les préfixes binaires ont la relation d'ordre suivante :
| 1 kibioctet (Kio) | = 2$^{10}$ octets | = 1 024 o | = 1 024 octets |
| 1 mébioctet (Mio) | = 2$^{20}$ octets | = 1 024 Kio | = 1 048 576 octets |
| 1 gibioctet (Gio) | = 2$^{30}$ octets | = 1 024 Mio | = 1 073 741 824 octets |
| 1 tébioctet (Tio) | = 2$^{40}$ octets | = 1 024 Gio | = 1 099 511 627 776 octets |
| 1 pébioctet (Pio) | = 2$^{50}$ octets | = 1 024 Tio | = 1 125 899 906 842 624 octets |
| 1 exbioctet (Eio) | = 2$^{60}$ octets | = 1 024 Pio | = 1 152 921 504 606 846 976 octets |
| 1 zébioctet (Zio) | = 2$^{70}$ octets | = 1 024 Eio | = 1 180 591 620 717 411 303 424 octets |
| 1 yobioctet (Yio) | = 2$^{80}$ octets | = 1 024 Zio | = 1 208 925 819 614 629 174 706 176 octets |
Les préfixes décimaux quant à eux sont identiques aux préfixes du Système international d'unités :
| 1 kilooctet (ko) | = 10$^3$ octets | = 1 000 o | = 1 000 octets |
| 1 mégaoctet (Mo) | = 10$^6$ octets | = 1 000 ko | = 1 000 000 octets |
| 1 gigaoctet (Go) | = 10$^9$ octets | = 1 000 Mo | = 1 000 000 000 octets |
| 1 téraoctet (To) | = 10$^{12}$ octets | = 1 000 Go | = 1 000 000 000 000 octets |
| 1 pétaoctet (Po) | = 10$^{15}$ octets | = 1 000 To | = 1 000 000 000 000 000 octets |
| 1 exaoctet (Eo) | = 10$^{18}$ octets | = 1 000 Po | = 1 000 000 000 000 000 000 octets |
| 1 zettaoctet (Zo) | = 10$^{21}$ octets | = 1 000 Eo | = 1 000 000 000 000 000 000 000 octets |
| 1 yottaoctet (Yo) | = 10$^{24}$ octets | = 1 000 Zo | = 1 000 000 000 000 000 000 000 000 octets |
| 1 ronnaoctet (Ro) | = 10$^{27}$ octets | = 1 000 Yo | = 1 000 000 000 000 000 000 000 000 000 octets |
| 1 quettaoctet (Qo) | = 10$^{30}$ octets | = 1 000 Ro | = 1 000 000 000 000 000 000 000 000 000 000 octets |

### Confusions entre multiples binaires et décimaux

Certains utilisateurs débutants sont légitimement perturbés lorsqu'un logiciel ou système d'exploitation leur présente une quantité d'octets affichée avec un préfixe décimal, ou un acronyme en « Go », « Mo », mais une quantité calculée, à tort, sur des puissances de 1024. Bien que les constructeurs indiquent sur leurs composants des valeurs décimales (par exemple « 32 Go » représentent 32 × 10$^9$ octets), ces logiciels vont indiquer soit correctement « 29,8 Gio », soit incorrectement « 29,8 Go ». Plus la capacité des supports augmente plus l'écart entre les valeurs attendues et constatées devient important : ainsi un disque dur de « 8 To » (valeur indiquée par le constructeur et qui est conventionnellement correcte) a une capacité affichée dans les systèmes d'exploitation de 8 × 10$^{12}$ / 1024$^4$ = 7,27 Tio, fréquemment notée de façon erronée « 7,27 To », soit un écart de 9 %.
Ces confusions ont été à l'origine de plusieurs actions en justice, notamment aux États-Unis.
L'usage des préfixes décimaux, en contradiction avec les recommandations de la Commission électrotechnique internationale qui définissent clairement d'autres préfixes, reste toujours répandu dans la littérature et dans le langage courant. Les préfixes recommandés — « kibi », « mébi »... — ne sont pas encore systématiquement intégrés.
D'autres usages courants, mais incorrects, suppriment complètement le nom ou le symbole de l'unité pour ne plus garder que le nom ou le symbole du préfixe multiplicateur (par exemple « 56K » ou « 20 méga »). Cela entraîne cependant de nombreuses ambiguïtés quant à la nature de cette unité, notamment quand on l'utilise pour exprimer un taux de transfert de données ou la capacité d'une puce de mémoire : en effet, dans ces deux cas, il est courant que l'on mesure en bits plutôt qu'en octets (ainsi un débit de connexion de « 20 méga » — selon l'appellation commerciale — correspond à 2,5 Mo/s, ce qui peut induire en erreur un utilisateur non averti).

### Variantes orthographiques

La langue française pose un problème d'orthographe, relativement à la prononciation de la voyelle initiale du mot « octet » lorsqu'il suit un préfixe ; on peut donc trouver dans la littérature les formes suivantes : « kilo-octet » (avec trait d'union) ou « kilooctet » (sans trait d'union).
Au Québec, la forme d'usage est sans le trait d'union, sauf lorsqu'on est en présence d'une lettre doublée

## Propriétés
### Propriétés de représentation binaire

Un octet peut représenter 2$^8$ soit 256 valeurs différentes. La valeur de tout octet peut s'écrire avec un entier naturel entre 0$_{10}$ et 255$_{10}$ compris. Elle peut aussi s'écrire avec huit chiffres binaires, entre 00000000$_2$ et 11111111$_2$ compris, ou avec deux chiffres hexadécimaux, entre 00$_{16}$ et FF$_{16}$ compris. La notation hexadécimale est utilisable dans de nombreux langages informatiques car elle est compacte et pratique pour noter la valeur d'un ou plusieurs octet(s).
Un octet peut servir à noter un entier naturel, appelé en informatique « non signé », entre 0 et 255 (en base dix). Une autre convention courante, le complément à deux, permet de noter un entier relatif, ou « signé », entre -128 et +127 compris (en base dix).
De nombreuses conventions existent pour représenter un caractère par un ou plusieurs octets. On peut notamment citer le codage ISO/CEI 8859-1, très utilisé pour représenter avec un octet les 10 chiffres, les 26 lettres minuscules, les 26 lettres majuscules, ainsi que les lettres accentuées et la ponctuation des langues d'Europe occidentale, dont le français. Plus récent, le codage UTF-8 permet de noter tout caractère avec un à quatre octets. L'article sur le codage des caractères développe ce thème.

### Propriétés de représentation décimale

Dans certaines applications nécessitant un codage exact des valeurs décimales (par exemple pour les applications financières), les puissances de 2 peuvent ne pas s'avérer pratiques. Aussi un octet est parfois utilisé pour stocker jusqu'à deux chiffres décimaux exactement (entre 00$_{10}$ et 99$_{10}$), chacun codé sur un quartet (quatre bits) distinct entre 0000$_2$ = 0$_{10}$ et 1001$_2$ = 9$_{10}$. Les autres valeurs de quartets peuvent être utilisées pour coder la position d'une virgule décimale, un signe, l'absence de chiffre significatif à la position indiquée, ou une autre fonction spéciale (valeur infinie, valeur erronée non numérique, etc.). Certains calculateurs (et des bibliothèques logicielles de calcul à virgule fixe ou travaillant sur de très grands entiers ou des valeurs de grande précision) utilisent ce format dit « BCD », sigle anglais de binary coded decimal (décimal codé en binaire).
L'usage du codage BCD était populaire sur les anciens systèmes (notamment ceux utilisant l'EBCDIC) car cela évitait une conversion finale coûteuse pour afficher les nombres à virgule flottante. De plus ce système était plus pratique au temps où les données étaient entrées manuellement sur des cartes perforées : pour convertir un nombre BCD en caractères, il suffisait d'éclater le nombre BCD en deux en n'utilisant qu'un seul quartet par octet pour représenter le chiffre en décimal, le quartet de poids fort prenant une valeur fixe indiquant simplement que c'est un chiffre décimal. Les autres valeurs de quartets de poids fort étaient utilisées pour indiquer que c'était une lettre majuscule, une lettre minuscule ou un autre symbole ou ponctuation. Aujourd'hui, dans la plupart des systèmes actuels, le codage EBCDIC des caractères et du BCD pour les valeurs numériques est plus rarement utilisé car la plupart des calculs se font plus rapidement en représentation binaire de façon matérielle avec une précision globale prédéfinie (codée sur un nombre fixe d'octets).
Des variantes du système BCD permettent de conserver une représentation précise des nombres à virgule fixe ou flottante en base dix, tout en permettant une plus grande compacité de stockage et en rendant les calculs plus rapides. L'astuce consiste à grouper les chiffres décimaux et les représenter en binaire sur un groupe de plusieurs octets. Par exemple :
* tout d'abord la représentation en quartets s'avère coûteuse en termes de traitement, et une valeur BCD est généralement d'abord convertie en supprimant la séparation en quartets, pour alors représenter en binaire les deux chiffres décimaux sur le même octet ; le calcul est alors simplifié car il s'effectue par groupe de deux chiffres à la fois au lieu d'un seul ; cette représentation laisse un bit de poids fort inutilisé (mais on peut l'utiliser comme marqueur pour des valeurs spéciales) ;
* on peut représenter exactement quatre chiffres décimaux dans un groupe de deux octets (c'est-à-dire sur 16 bits, puisque ceux-ci peuvent contenir 2$^{16}$ = 65 536 valeurs différentes) ; avec une représentation BCD, on stockerait exactement également quatre chiffres décimaux, mais les calculs se feraient uniquement chiffre par chiffre (c'est-à-dire quatre fois plus lentement) ; cette représentation laisse deux bits de poids fort inutilisés (mais on peut les utiliser comme marqueurs pour des valeurs spéciales).
* on peut représenter exactement sept chiffres décimaux dans un groupe de trois octets (c'est-à-dire sur 24 bits, puisque ceux-ci peuvent contenir 2$^{24}$ = 16 777 216 valeurs différentes) ; avec une représentation BCD, on ne stockerait exactement que six chiffres décimaux ; cette représentation ne laisse aucun bit inutilisé ;
* on peut représenter exactement neuf chiffres décimaux dans un groupe de quatre octets (c'est-à-dire sur 32 bits, puisque ceux-ci peuvent contenir 2$^{32}$ = 4 294 967 296 valeurs différentes) ; avec une représentation BCD, on ne stockerait exactement que huit chiffres décimaux ; cette représentation laisse deux bits de poids fort inutilisés (mais on peut les utiliser comme marqueurs pour des valeurs spéciales). Cette représentation est souvent utilisée dans les bibliothèques mathématiques de calcul sur des nombres de très grande précision.

## Usages

Les processeurs n'opèrent généralement pas sur chaque bit individuellement, mais sur des groupes de bits. L'habitude de concevoir le matériel pour qu'il traite les bits par huit, ou par multiples de huit, s'est généralisée depuis les années 1970, si bien qu'aujourd'hui l'octet et ses multiples sont généralement utilisés comme mesure de la capacité de mémorisation des mémoires informatiques : mémoire vive, disquette, disque dur, CD-ROM, etc. La taille des fichiers est aussi mesurée en octets (avec le plus souvent les multiples conventionnels en binaire).
Le taux de transfert des bus informatiques entre les applications informatiques et périphériques informatiques locaux est généralement donné en octets par seconde (avec les multiples normalisés ; voir ci-après). Mais les débits sur les réseaux ou supports de transmission de données s'expriment plutôt :
* en bauds (avec les multiples normalisés) c'est-à-dire le nombre de symboles codés par seconde, pour les technologies matérielles de modulation de très bas niveau, par exemple dans les modems, ces technologies séparant la fréquence d'échantillonnage en bauds (fortement liée à la bande passante physique exprimée en hertz) de la précision d'échantillonnage exprimée en bits par symbole (fortement liée au rapport signal/bruit du support de transmission exprimé en décibels ou en bits) ;
* en bits par seconde (avec les multiples normalisés) pour le débit binaire final utilisable, résultant du produit du débit en bauds par le nombre de bits transmis par symbole, diminué éventuellement des bits de détection ou correction d'erreurs ou de synchronisation.

### Bits et octets

Exemples de conversion des bits vers octets (sans normalisation CEI) :
* 8 bits = 1 octet
* 1 kilobit = 1 000 bits = 125 octets
* 1 kibibit = 1 024 bits = 128 octets
* 512 kibibits = 524 288 bits = 65 536 octets = 64 kibioctets (65 536 / 1 024 kibioctets).
* 1 mébibit = 1 048 576 bits = 131 072 octets = 128 kibioctets (131 072 / 1 024 kibioctets).
* 10 mébibits = 10 485 760 bits = 1 310 720 octets = 1,25 mébioctet (1 310 720 / 1 024$^2$ mébioctet)
* 100 mébibits = 104 857 600 bits = 13 107 200 octets = 12,5 mébioctets (13 107 200 / 1 024$^2$ mébioctet)

### Mots

Lorsque le traitement se fait sur plusieurs octets simultanément, notamment deux octets (16 bits) et quatre octets (32 bits), on parle parfois de mot et de double-mot, ou bien de demi-mot et de mot. La signification de ces termes a tendance à varier avec le contexte, notamment car en terminologie des langages d'assemblage pour processeurs, le « mot » désigne souvent la quantité d'information dans un registre de calcul entier pour une opération élémentaire, cette quantité pouvant aussi dépendre du mode d'adressage utilisé par le processeur à l'exécution (ou des traditions de programmation pour un système d'exploitation donné), aussi n'est-il pas recommandé de les utiliser.
Les termes « doublet » (16 bits), « quadlet » (32 bits) et « octlet » (64 bits) sont parfois utilisés alors pour enlever toute ambiguïté.