web-dev-qa-db-fra.com

Pourquoi un octet n'a que 0 à 255?

Pourquoi un octet ne varie que de 0 à 255?

31
Strawberry

À strictement parler, le terme "octet" peut en fait se référer à une unité avec autre que 256 valeurs. C'est juste que c'est la taille presque universelle . De Wikipedia :

Historiquement, un octet était le nombre de bits utilisés pour coder un seul caractère de texte dans un ordinateur et c'est pour cette raison l'élément adressable de base dans de nombreuses architectures informatiques.

La taille de l'octet a été historiquement dépendante du matériel et il n'existe aucune norme définitive qui impose la taille. La norme de facto de huit bits est une puissance pratique de deux permettant les valeurs de 0 à 255 pour un octet. De nombreux types d'applications utilisent des variables représentables sur huit bits ou moins, et les concepteurs de processeurs optimisent pour cette utilisation courante. La popularité des principales architectures informatiques commerciales a contribué à l'acceptation omniprésente de la taille 8 bits. Le terme octet a été défini pour désigner explicitement une séquence de 8 bits en raison de l'ambiguïté associée au terme octet.

Ironiquement, de nos jours, la taille d'un "caractère unique" n'est plus considérée comme un seul octet dans la plupart des cas ... le plus souvent, l'idée d'un "caractère" est associée à Unicode, où les caractères peuvent être représentés dans un certain nombre de différents formats, mais sont généralement 16 bits ou 32.

Il serait amusant pour un système qui utilise UCS-4/UTF-32 (la représentation directe sur 32 bits d'Unicode) de désigner 32 bits comme octet. La confusion causée serait spectaculaire.

Cependant, en supposant que nous prenons "octet" comme synonyme de "octet", il y a huit bits indépendants , chacun pouvant être activé ou désactivé, vrai ou faux, 1 ou 0, comme vous le souhaitez. Cela conduit à 256 valeurs possibles, qui sont généralement numérotées de 0 à 255. (Ce n'est pas toujours le cas cependant. Par exemple, les concepteurs de Java ont malheureusement décidé de traiter les octets comme entiers signés compris entre -128 et 127.)

52
Jon Skeet

Parce qu'un octet , par sa définition standard, est de 8 bits qui peuvent représenter 256 valeurs (0 à 255).

26
Daniel A. White

Octet ≠ Octet

Pourquoi un octet ne varie que de 0 à 255?

Ce n'est pas le cas.

Un octet a 8 bits, permettant ainsi 28 possibilités. A byte est mal défini. Il ne faut pas assimiler les deux termes, car ils ne sont pas complètement interchangeables. De plus, les langages de programmation méchants qui ne prennent en charge que les caractères signés (ʏᴏᴜ ᴋɴᴏw ᴡʜᴏ ʏᴏᴜ ᴀʀᴇ﹗) ne peuvent représenter que les valeurs −128 à 127, et non 0 à 255.

Big Iron prend beaucoup de temps à Rust.

La plupart des machines modernes, mais pas toutes, ont toutes des octets de 8 bits, mais c'est un phénomène relativement récent. Il n'en a certainement pas toujours été ainsi. De nombreux ordinateurs très anciens avaient des octets de 4 bits, et les octets de 6 bits étaient autrefois communs, même comparativement récemment. Ces deux types d'octets contiennent plutôt des valeurs - moins que 255.

Ces octets de 6 bits pourraient être très pratiques, car avec une taille de mot de 36 bits, six de ces octets s'intègrent parfaitement dans l'un de ces mots de 36 bits sans jigger. Cela a été très utile pour contenir Fieldata , utilisé par les très populaires ordinateurs Sperry ᴜɴɪᴠᴀᴄ . Vous ne pouvez insérer que 4 ᴀsᴄɪɪ caractères dans un mot 36 bits, pas 6 Fieldata. Nous avions la série 1100 au centre de calcul lorsque j'étais étudiant, mais cela reste vrai même avec la série 2200 moderne.

Entrez ASCII

ᴀsᴄɪɪ - qui était et qui est seulement un code 7 - pas un code 8 bits - a ouvert la voie à l'éclatement de ce monde. L'importance de ɪʙᴍ 36 , qui avait 8 octets, qu'ils contiennent ou non ᴀsᴄɪɪ, ne doit pas être sous-estimée.

Néanmoins, de nombreuses machines ont longtemps supporté Radix-50 de ᴅᴇᴄ . Il s'agissait d'un répertoire de 40 caractères dans lequel trois de ses caractères pouvaient être efficacement regroupés en un seul mot de 16 bits sous deux schémas de codage distincts. J'ai utilisé beaucoup de ᴅᴇᴄ ᴘᴅᴘ ‑ 11 et de Vaxen pendant mes jours à l'université, et le Rad ‑ 50 était tout simplement une réalité de la vie, une réalité à laquelle il fallait s'adapter.

23
tchrist

Un octet a 8 bits (8 1 ou 0) 01000111 = 71

chaque bit représente une valeur, 1,2,4,8,16,32,64,128 mais de droite à gauche?

exemple

128, 64, 32, 16, 8, 4, 2, 1,
0    1   0   0   0  1  1  1 =71
1    1   1   1   1  1  1  1 = max 255
0    0   0   0   0  0  0  0 = min 0

en utilisant des binaires 1 ou 0 et seulement 8 bits (1 octet), nous ne pouvons avoir

1 de chaque valeur 1 X 128, 1 X 64,1 X 32 etc donnant un total maximum de 255 et un min de 0

6
Glen

Vous avez tort! Un octet va de 0 à 63 ou de 0 à 99!

Croyez-vous en Die ? Dieu a dit dans la Sainte Bible .

L'unité d'information de base est un octet. Chaque octet contient une quantité non spécifiée d'informations, mais il doit être capable de contenir au moins 64 valeurs distinctes. Autrement dit, nous savons que tout nombre compris entre 0 et 63, inclus, peut être contenu dans un octet. De plus, chaque octet contient au plus 100 valeurs distinctes. Sur un ordinateur binaire, un octet doit donc être composé de six bits; sur un ordinateur décimal, nous avons deux chiffres par octet. * - The Art of Computer Programming, Volume 1, écrit par Donald Knuth.

Et...

* Depuis 1975 environ, le mot "octet" est devenu une séquence de huit chiffres binaires précisément, capable de représenter les nombres de 0 à 255. Les octets du monde réel sont donc plus grands que les octets de la machine MIX hypothétique; en effet, les octets à l'ancienne de MIX sont à peine plus gros que les nybbles. Lorsque nous parlons d'octets en relation avec MIX, nous nous limiterons à l'ancien sens de la Parole, remontant à l'époque où les octets n'étaient pas encore standardisés. - L'art de la programmation informatique, volume 1, écrit par Donald Knuth.

:-)

6
RedPain

Un octet n'a que 8 bits. Un bit est un chiffre binaire. Un octet peut donc contenir 2 (binaires) ^ 8 nombres allant de 0 à 2 ^ 8-1 = 255.

C'est la même chose que de demander pourquoi un nombre décimal à 3 chiffres peut représenter des valeurs de 0 à 999, ce qui est répondu de la même manière (10 ^ 3 - 1).

À l'origine, les octets n'étaient pas toujours 8 bits. Ils représentaient "quelques" bits qui pouvaient également être 6, 7 ou 9 bits. Cela a ensuite été standardisé et il était logique de faire de ces unités une puissance de deux, en raison de la nature binaire de l'informatique. D'où le quartet (4 bits, ou un demi-octet) et l'octet 8 bits.

[modifier] C'est aussi pourquoi la numérotation octale et hexadécimale est devenue populaire. Un nombre octal représente 3 bits et un nombre hexadécimal représente 4 bits. Ainsi, un nombre hexadécimal à chiffres peut représenter exactement un octet. Il est beaucoup plus logique d'avoir un nombre compris entre 0 et 0xFF que entre 0 et 255. :)

5
GolezTrol

Je noterai que sur la série d'ordinateurs PDP-10, un octet était une construction de longueur variable, définie par un "pointeur d'octets" qui définissait le nombre de bits ainsi que le décalage par rapport au début de la zone de stockage. Il y avait alors un ensemble d'instructions machine pour traiter un pointeur d'octets, notamment:

  • LDB - Charger l'octet
  • DPB - Octet de dépôt
  • ILDB - Incrémenter le pointeur, puis charger l'octet
  • IDPB - Incrémenter le pointeur, puis déposer l'octet (j'espère que j'ai bien compris celui-ci - il ne me semble pas correct)

En fait, un "octet" était ce que nous appellerions aujourd'hui un champ de bits. L'utilisation d'un pointeur d'octets pour représenter le suivant dans une série d'octets de la même taille n'était qu'une de ses utilisations.

Certains des jeux de caractères utilisés étaient "six bits" (majuscules uniquement, six octets pour un mot 36 bits), ASCII (majuscules et minuscules, cinq octets pour un mot, avec un peu de reste), et rarement EBCDIC (le jeu de caractères IBM, qui utilisait quatre octets de huit bits par mot, laissant inutilement quatre bits par mot inutilisés).

3
John Saunders

À strictement parler, ce n'est pas le cas.

Sur la plupart des systèmes modernes, un octet est de 8 bits binaires, mais sur certains systèmes, ce n'était pas toujours le cas (de nombreux ordinateurs plus anciens utilisaient 7 bits pour représenter ASCII caractères (alias octets)) et les systèmes de cartes perforées étaient souvent basés sur des caractères 6 bits (alias octets), par exemple).

Si vous parlez d'un octet 8 bits, cela peut représenter n'importe quelle plage que vous souhaitez. Cependant, il ne peut représenter que 256 valeurs distinctes, il est donc généralement utilisé pour représenter 0..255 ("octet non signé") ou -128 .. + 127 ("octet signé").

3
Jason Williams