L' octet est une unité d'information numérique qui se compose généralement de huit bits . Historiquement, l'octet était le nombre de bits utilisés pour coder un seul caractère de texte dans un ordinateur et pour cette raison, il est la plus petite unité de mémoire adressable dans de nombreuses architectures informatiques . Pour lever l'ambiguïté des octets de taille arbitraire par rapport à la définition courante de 8 bits , les documents de protocole réseau tels que le protocole Internet ( RFC 791) font référence à un octet de 8 bits comme un octet . Ces bits dans un octet sont généralement comptés avec une numérotation de 0 à 7 ou de 7 à 0 selon le boutisme binaire .
La taille de l'octet a toujours été dépendante du matériel et il n'existait aucune norme définitive imposant cette taille. Des tailles allant de 1 à 48 bits ont été utilisées. Le code de caractères à six bits était une implémentation souvent utilisée dans les premiers systèmes de codage, et les ordinateurs utilisant des octets à six et neuf bits étaient courants dans les années 1960. Ces systèmes avaient souvent des mots mémoire de 12, 18, 24, 30, 36, 48 ou 60 bits, correspondant à 2, 3, 4, 5, 6, 8 ou 10 octets à six bits, et ont persisté, dans les systèmes hérités, jusqu'au XXIe siècle. À cette époque, les groupements de bits dans le flux d'instructions étaient souvent appelés syllabes ou slab , avant que le terme octet ne devienne courant.
La norme de facto moderne de huit bits, telle que documentée dans la norme ISO/IEC 2382-1:1993, est une puissance pratique de deux autorisant les valeurs codées en binaire de 0 à 255 pour un octet, car 2 à la puissance de 8 est égal à 256. La norme internationale IEC 80000-13 a codifié cette signification courante. De nombreux types d'applications utilisent des informations représentables en huit bits ou moins et les concepteurs de processeurs optimisent généralement cette utilisation. La popularité des principales architectures informatiques commerciales a contribué à l'acceptation généralisée de l'octet de 8 bits. Les architectures modernes utilisent généralement des mots de 32 ou 64 bits, constitués respectivement de quatre ou huit octets.
Le symbole d'unité pour l'octet a été désigné comme la lettre majuscule B par la Commission électrotechnique internationale (CEI) et l'Institute of Electrical and Electronics Engineers (IEEE). Au niveau international, l' octet définit explicitement une séquence de huit bits, éliminant ainsi l'ambiguïté potentielle du terme « octet ». Le symbole de l'octet, « o », élimine également de manière pratique l'ambiguïté du symbole « B » entre octet et bel .
Étymologie et histoire
Le terme octet a été inventé par Werner Buchholz en juin 1956, au cours de la première phase de conception de l' ordinateur IBM Stretch , qui avait un adressage au bit et des instructions de longueur de champ variable (VFL) avec une taille d'octet codée dans l'instruction. Il s'agit d'une réécriture délibérée de bite pour éviter une mutation accidentelle en bit .
Une autre origine de l'octet pour les groupes de bits plus petits que la taille d'un mot d'un ordinateur, et en particulier les groupes de quatre bits , est enregistrée par Louis G. Dooley, qui prétend avoir inventé le terme alors qu'il travaillait avec Jules Schwartz et Dick Beeler sur un système de défense aérienne appelé SAGE au MIT Lincoln Laboratory en 1956 ou 1957, qui a été développé conjointement par Rand , le MIT et IBM. Plus tard, le langage JOVIAL de Schwartz a effectivement utilisé le terme, mais l'auteur se souvient vaguement qu'il était dérivé de AN/FSQ-31 .
Les premiers ordinateurs utilisaient une variété de représentations décimales codées binaires à quatre bits (BCD) et des codes à six bits pour les motifs graphiques imprimables courants dans l' armée américaine ( FIELDATA ) et la marine . Ces représentations comprenaient des caractères alphanumériques et des symboles graphiques spéciaux. Ces ensembles ont été étendus en 1963 à sept bits de codage, appelés American Standard Code for Information Interchange (ASCII) en tant que Federal Information Processing Standard , qui a remplacé les codes de téléimprimeur incompatibles utilisés par différentes branches du gouvernement américain et des universités dans les années 1960. L'ASCII comprenait la distinction entre les alphabets majuscules et minuscules et un ensemble de caractères de contrôle pour faciliter la transmission du langage écrit ainsi que les fonctions des périphériques d'impression, telles que l'avance de page et le saut de ligne, et le contrôle physique ou logique du flux de données sur le support de transmission. Au début des années 1960, tout en étant actif dans la normalisation ASCII, IBM a simultanément introduit dans sa gamme de produits System/360 le code EBCDIC ( Extended Binary Coded Decimal Interchange Code ) à huit bits , une extension de leurs représentations décimales codées binaires à six bits (BCDIC) utilisées dans les perforatrices de cartes antérieures. L'importance du System/360 a conduit à l'adoption généralisée de la taille de stockage à huit bits, alors que dans le détail, les schémas de codage EBCDIC et ASCII sont différents.
Au début des années 1960, AT&T a introduit la téléphonie numérique sur les lignes interurbaines longue distance . Celles-ci utilisaient le codage μ-law à huit bits . Cet investissement important promettait de réduire les coûts de transmission des données à huit bits.
Dans le premier volume de The Art of Computer Programming (publié pour la première fois en 1968), Donald Knuth utilise le terme octet dans son ordinateur MIX hypothétique pour désigner une unité qui « contient une quantité indéterminée d'informations... capable de contenir au moins 64 valeurs distinctes... au plus 100 valeurs distinctes. Sur un ordinateur binaire, un octet doit donc être composé de six bits ». Il note que « depuis 1975 environ, le mot octet désigne une séquence de huit chiffres binaires précisément... Lorsque nous parlons d'octets en rapport avec MIX, nous nous limiterons à l'ancien sens du mot, rappelant l'époque où les octets n'étaient pas encore normalisés ».
Le développement des microprocesseurs à huit bits dans les années 1970 a popularisé cette taille de stockage. Les microprocesseurs tels que l' Intel 8080 , le prédécesseur direct du 8086 , pouvaient également effectuer un petit nombre d'opérations sur les paires de quatre bits d'un octet, comme l'instruction DAA (decimal-add-adjust). Une quantité de quatre bits est souvent appelée un nibble , également nybble , qui est commodément représenté par un seul chiffre hexadécimal .
Le terme octet spécifie sans ambiguïté une taille de huit bits. Il est largement utilisé dans les définitions de protocole .
Historiquement, le terme octade était également utilisé pour désigner huit bits, au moins en Europe occidentale ; cependant, cet usage n'est plus courant. L'origine exacte du terme n'est pas claire, mais on le retrouve dans des sources britanniques, néerlandaises et allemandes des années 1960 et 1970, et dans toute la documentation des ordinateurs centraux Philips .
Symbole d'unité
Le symbole d'unité pour l'octet est spécifié dans les normes IEC 80000-13 , IEEE 1541 et le format d'échange métrique comme le caractère majuscule B.
Dans le Système international de grandeurs (ISQ), B est également le symbole du bel , une unité de rapport logarithmique de puissance nommée d'après Alexander Graham Bell , ce qui crée un conflit avec la spécification CEI. Cependant, il existe peu de risque de confusion, car le bel est une unité rarement utilisée. Il est principalement utilisé dans sa fraction décimale, le décibel (dB), pour les mesures de l'intensité du signal et du niveau de pression acoustique , tandis qu'une unité pour un dixième d'octet, le décioctet, et d'autres fractions, ne sont utilisées que dans des unités dérivées, telles que les débits de transmission.
La lettre minuscule o pour octet est définie comme le symbole de l'octet dans la norme CEI 80000-13 et est couramment utilisée dans des langues telles que le français et le roumain , et est également combinée avec des préfixes métriques pour les multiples, par exemple ko et Mo.
Unités multi-octets
Il existe plusieurs systèmes permettant de définir les multiples d'unités basés sur l'octet. Certains systèmes sont basés sur des puissances de 10 , conformément au Système international d'unités (SI), qui définit par exemple le préfixe kilo comme 1 000 (10 3 ) ; d'autres systèmes sont basés sur des puissances de 2 . La nomenclature de ces systèmes a entraîné une confusion. Les systèmes basés sur des puissances de 10 utilisent des préfixes SI standards ( kilo , méga , giga , ...) et leurs symboles correspondants (k, M, G, ...). Les systèmes basés sur des puissances de 2, cependant, peuvent utiliser des préfixes binaires ( kibi , mebi , gibi , ...) et leurs symboles correspondants (Ki, Mi, Gi, ...) ou ils peuvent utiliser les préfixes K, M et G, créant une ambiguïté lorsque les préfixes M ou G sont utilisés.
Bien que la différence entre les interprétations décimales et binaires soit relativement faible pour le kilo-octet (environ 2 % de moins que pour le kibioctet), les systèmes s'écartent de plus en plus à mesure que les unités deviennent plus grandes (l'écart relatif augmente de 2,4 % pour chaque trois ordres de grandeur). Par exemple, un téraoctet basé sur une puissance de 10 est environ 9 % plus petit qu'un tébioctet basé sur une puissance de 2.
Unités basées sur des puissances de 10
La définition des préfixes utilisant des puissances de 10, dans lesquelles 1 kilo-octet (symbole kB) est défini comme égal à 1 000 octets, est recommandée par la Commission électrotechnique internationale (CEI). La norme CEI définit huit de ces multiples, jusqu'à 1 yottaoctet (YB), égal à 1 000 8 octets. Les préfixes supplémentaires ronna- pour 1 000 9 et quetta- pour 1 000 10 ont été adoptés par le Bureau international des poids et mesures (BIPM) en 2022.
Cette définition est le plus souvent utilisée pour les unités de débit de données dans les réseaux informatiques , les vitesses de transfert du bus interne, du disque dur et des supports flash, ainsi que pour les capacités de la plupart des supports de stockage , en particulier les disques durs , flash , et les DVD . Les systèmes d'exploitation qui utilisent cette définition incluent macOS , iOS , Ubuntu , et Debian . Elle est également cohérente avec les autres utilisations des préfixes SI en informatique, telles que les vitesses d'horloge du processeur ou les mesures de performances .
Unités basées sur les puissances de 2
Un système d'unités basé sur des puissances de 2 dans lequel 1 kibioctet (Kio) est égal à 1 024 (soit 2 10 ) octets est défini par la norme internationale IEC 80000-13 et est soutenu par les organismes de normalisation nationaux et internationaux ( BIPM , IEC , NIST ). La norme IEC définit huit de ces multiples, jusqu'à 1 yobioctet (Yio), égal à 1024 8 octets. Les équivalents binaires naturels de ronna- et quetta- ont été donnés dans un document de consultation du Comité consultatif des unités du Comité international des poids et mesures (CCU) comme robi- (Ri, 1024 9 ) et quebi- (Qi, 1024 10 ), mais n'ont pas encore été adoptés par la CEI et l'ISO.
Un autre système de nomenclature pour les mêmes unités (appelé ici convention coutumière ), dans lequel 1 kilo-octet (Ko) équivaut à 1 024 octets, 1 mégaoctet (Mo) équivaut à 1 024 2 octets et 1 gigaoctet (Go) équivaut à 1 024 3 octets est mentionné par une norme JEDEC des années 1990. Seuls les trois premiers multiples (jusqu'à Go) sont mentionnés par la norme JEDEC, qui ne fait aucune mention des To et plus. Bien que déroutante et incorrecte, la convention coutumière est utilisée par le système d'exploitation Microsoft Windows et la capacité de mémoire vive , comme la mémoire principale et la taille du cache du processeur , ainsi que dans le marketing et la facturation des sociétés de télécommunications, telles que Vodafone , AT&T , Orange et Telstra .
Pour la capacité de stockage , la convention habituelle a été utilisée par macOS et iOS jusqu'à Mac OS X 10.6 Snow Leopard et iOS 10, après quoi ils sont passés à des unités basées sur des puissances de 10.
Unités paroissiales
Différents fournisseurs d'ordinateurs ont inventé des termes pour des données de tailles diverses, parfois avec des tailles différentes pour le même terme même au sein d'un même fournisseur. Ces termes incluent double word , half word , long word , quad word , slab , superword et syllab . Il existe également des termes informels, par exemple, half byte et nybble pour 4 bits, octal K pour 1000 8 .
Histoire des définitions contradictoires

La mémoire informatique contemporaine architecture binaire, ce qui rend plus pratique une définition des unités de mémoire basée sur des puissances de 2. L'utilisation du préfixe métrique kilo pour les multiples binaires est née par commodité, car1024 est environ1000 . Cette définition était populaire dans les premières décennies de l'informatique personnelle , avec des produits comme le format de disquette Tandon 5 1 ⁄ 4 pouces DD (contenant368 640 octets) annoncés comme « 360 Ko », suivant leConvention de 1024 octets. Elle n'était cependant pas universelle. La disquette Shugart SA-400 de 5 1 ⁄ 4 pouces contenait 109 375 octets non formatés, et était annoncée comme "110 Ko", en utilisant la convention de 1000. DEC RX01 de 8 pouces (1975) contenait256 256 octets formatés et annoncés comme « 256 Ko ». Certains périphériques ont été annoncés en utilisant un mélange des deux définitions : notamment, les disquettes annoncées comme « 1,44 Mo » ont une capacité réelle de1440 Ko , soit l'équivalent de 1,47 Mo ou 1,41 Mio.
En 1995, le Comité interdivisionnaire de nomenclature et de symboles de l' Union internationale de chimie pure et appliquée (IUPAC) a tenté de résoudre cette ambiguïté en proposant un ensemble de préfixes binaires pour les puissances de 1024, notamment kibi (kilobinaire), mebi (mégabinaire) et gibi (gigabinaire).
En décembre 1998, la CEI a abordé ces multiples usages et définitions en adoptant les préfixes proposés par l'IUPAC (kibi, mebi, gibi, etc.) pour désigner sans ambiguïté les puissances de 1024. Ainsi, un kibioctet (1 Ko) correspond à 1024 1 octets = 1024 octets, un mébioctet (1 Mio) correspond à 1024 2 octets =1 048 576 octets, et ainsi de suite.
En 1999, Donald Knuth a suggéré d'appeler le kibioctet un « grand kilooctet » ( KKB ).
Définitions des normes modernes
La CEI a adopté la proposition de l'IUPAC et publié la norme en janvier 1999. Les préfixes de la CEI font partie du Système international de grandeurs . La CEI a en outre précisé que le kilo-octet ne devait être utilisé que pour désigner1000 octets.
Poursuites judiciaires concernant la définition
Les poursuites judiciaires découlant de la confusion présumée des consommateurs sur les définitions binaires et décimales des multiples de l'octet se sont généralement terminées en faveur des fabricants, les tribunaux estimant que la définition légale du gigaoctet ou Go est de 1 Go =1 000 000 000 (10 9 ) octets (la définition décimale), plutôt que la définition binaire (2 30 , c'est-à-dire,1 073 741 824 ). Plus précisément, le tribunal de district des États-Unis pour le district nord de la Californie a jugé que « le Congrès américain a jugé que la définition décimale du gigaoctet était la « préférée » aux fins du « commerce et des échanges aux États-Unis » [...] La législature californienne a également adopté le système décimal pour toutes les « transactions dans cet État » . »
Des procès antérieurs avaient abouti à un règlement sans décision judiciaire sur la question, comme un procès contre le fabricant de disques Western Digital . Western Digital a réglé le litige et a ajouté des clauses de non-responsabilité explicites sur les produits indiquant que la capacité utilisable peut différer de la capacité annoncée. Seagate a été poursuivi pour des motifs similaires et a également réglé le litige.
Exemples pratiques
Utilisations courantes
De nombreux langages de programmation définissent le type de données octet .
Les langages de programmation C et C++ définissent l'octet comme une « unité adressable de stockage de données suffisamment grande pour contenir n'importe quel élément du jeu de caractères de base de l'environnement d'exécution » (clause 3.6 de la norme C). La norme C exige que le type de données intégral unsigned char contienne au moins 256 valeurs différentes et soit représenté par au moins huit bits (clause 5.2.4.2.1). Diverses implémentations de C et C++ réservent 8, 9, 16, 32 ou 36 bits pour le stockage d'un octet. De plus, les normes C et C++ exigent qu'il n'y ait pas d'espace entre deux octets. Cela signifie que chaque bit en mémoire fait partie d'un octet.
Le type de données primitif de Java , byte, est défini comme huit bits. Il s'agit d'un type de données signé, contenant des valeurs comprises entre −128 et 127.
Les langages de programmation .NET , tels que C# , définissent l'octet comme un type non signé et le sbyte comme un type de données signé, contenant des valeurs de 0 à 255 et de −128 à 127 , respectivement.
Dans les systèmes de transmission de données, l'octet est utilisé comme une séquence contiguë de bits dans un flux de données série, représentant la plus petite unité de données distinguée. Pour la communication asynchrone, une unité de transmission complète comprend généralement en plus un bit de départ, 1 ou 2 bits d'arrêt et éventuellement un bit de parité , et sa taille peut donc varier de sept à douze bits pour cinq à huit bits de données réelles. Pour la communication synchrone, la vérification des erreurs utilise généralement des octets à la fin d'une trame .