Je trouve plusieurs sources affirmant que la puissance de deux bits dans un mot binaire (comme 8 bits par octet) est une "bonne chose" ou "pratique". Je ne trouve aucune source expliquant pourquoi.
De Quelle est l'histoire de pourquoi les octets sont huit bits? nous lisons dans la réponse approuvée:
Les ordinateurs binaires motivent les concepteurs à faire des puissances de taille de deux.
D'accord mais pourquoi? Dans la même question, mais dans le champ de commentaire de la question, je trouve:
La dernière phrase est-elle une plaisanterie? Un octet de 12 bits serait gênant car ce n'est pas une puissance de 2. - robjb
Encore une fois, sans justification ...
les calculs d'adresse sont beaucoup plus simples avec des puissances de 2, et cela compte lorsque vous créez une logique à partir de transistors bruts dans de petites boîtes - Mike
Comme les octets sont la plus petite unité adressable, cela n'a pas beaucoup de sens. Beaucoup de votes positifs sur le commentaire. Peut-être que j'ai raté quelque chose.
De Wikipédia :
La norme de facto de huit bits est une puissance pratique de deux permettant les valeurs de 0 à 255 pour un octet
Et ce serait pratique parce que ...?
Par souci de clarté, il s'agit du nombre de bits par octet (par exemple 8 ou 6, etc.), et non du nombre de valeurs par octet (par exemple 2 8 ou 2 6 , etc.). En raison de la confusion, je souligne également qu'il ne s'agit pas de la taille des mots.
Je ne suis pas trop intéressé par les raisons historiques. Celles-ci ont été bien expliquées ailleurs (voir liens).
Question connexe sur SO: /programming/1606827/why-is-number-of-bits-always-a-power-of-two
Réponses:
Je ne pense pas que les octets 8 bits aient réussi car ils ont une largeur qui est une puissance de deux. Si vous ne voulez pas adresser les bits individuellement - et c'est une caractéristique commune ni maintenant ni dans le passé - avoir une puissance de deux n'a pas vraiment d'importance pratique (c'est juste - maintenant beaucoup plus que par le passé lorsque vous épargnez certains composants discrets étaient importants - un réflexe pour les ingénieurs matériels et logiciels et rester dans un terrain familier est important à d'autres fins), et je ne me souviens pas avoir vu mentionné dans mon histoire de lectures informatiques (1). Il fallait des minuscules, ce qui signifiait quelque chose de plus que les jeux de caractères alors dominants de 6 bits. ASCII était à 7 bits, mais ASCII était alors purement identique à celui de l'échange (et donc à traduire en code interne pour la gestion), et donc
et pour le matériel octet 8 bits gagné car il permettait de compresser 2 chiffres décimaux dans un octet à la fois lorsque 75% des données étaient numériques et représentées en BCD (3).
(1) par exemple Blaauw et Brooks, Computer Architecture ; MacKenzie, Coded Character Sets, History and Development ont tous deux une discussion à ce sujet.
(3) Document de X3.2 - le sous-comité responsable de l'ASCII - cité par MacKenzie.
(3) MacKenzie, encore une fois.
la source
À part un accident historique, il n'y a aucune raison particulière pour laquelle nous devrions utiliser le bit 8/16/32/64. Je suppose que 12/24/48/96 bits serait vraiment plus utile.
Pour gérer le texte, Unicode utilisant un UTF-24 hypothétique serait moins cher que l'UTF32; UTF-12 hypothétique stockerait tous les caractères UTF-8 à un et deux octets sur 12 bits, et tous les caractères UTF-8 à trois et quatre octets sur 24 bits (la plage serait légèrement réduite à 2 ^ 20 caractères, mais c'est toujours quatre fois plus que ce qui est généreusement utilisé); le code serait plus simple car il n'y a que deux variantes.
Pour la virgule flottante, 48 bits sont généralement suffisants. 96 bits est nettement meilleur que 80 bits étendu. 24 bits est utile pour les graphiques; beaucoup plus utile que le 16 bits pris en charge par certaines cartes graphiques. Les pointeurs 48 bits peuvent gérer 256 téraoctets.
Le seul inconvénient concerne les tableaux de bits, où une division par 12 est nécessaire pour calculer les positions d'octets. Si cela est jugé important, je suis sûr que la division par 12 peut être implémentée assez efficacement dans le matériel.
la source
Ceci est pratique en raison des architectures matérielles courantes utilisant des multiples de 8, par exemple des architectures 32 bits et 64 bits. Cela signifie une plus grande efficacité lors de l'utilisation du stockage et de la transmission de données 8 bits.
"Cependant, les considérations d'économie dans la conception poussent fortement à une taille, ou à très peu de tailles liées par des multiples ou des fractions (sous-multiples) à une taille primaire. Cette taille préférée devient la taille de mot de l'architecture."
Word (architecture informatique)
Voir aussi: Quelle est l'histoire de pourquoi les octets sont huit bits?
la source
2⁸-1
.Selon un article de Wikipédia pour Word , cela facilite considérablement les calculs liés à l'adressage de la mémoire:
la source
Il est étroitement lié à l'espace d'adressage. En ajoutant un peu plus à votre bus d'adresses, vous pouvez adresser deux fois plus d'emplacements de mémoire. Ainsi, lorsque vous ajoutez cette ligne supplémentaire, vous pouvez tout aussi bien l'utiliser dans toute son étendue.
Cela conduit à une progression naturelle de 1, 2, 4, 8, 16, 32 et cetera.
Au niveau technique de production, il est également facile de répéter le même motif lithographique. Autrement dit, pour le doubler. Si vous commencez avec un verrou puis doublez le motif, vous passerez 8, pas 6, 10 ou 12.
la source
Les largeurs de mots ne sont pas toujours une puissance de deux. J'ai récemment fait du codage dans un DSP SHArC qui a une largeur de mot de 32 bits pour les nombres mais pas pour les opcodes (qui ont une largeur de 48 bits).
La raison pour laquelle la largeur des mots est une puissance de deux est probablement due à certaines instructions qui testent (ou définissent, effacent ou basculent) un seul bit ou décalent (ou tournent) vers la gauche ou la droite d'un nombre spécifié de bits. Il y a un champ de bits dans l'opcode pour spécifier l'emplacement du bit unique ou le nombre de bits à décaler. Si la largeur du mot est une puissance de deux, ce champ de bits nécessite des bits de log 2 (word_width) pour couvrir le mot entier. C'est-à-dire qu'un mot de 32 bits de large a besoin d'un champ de 5 bits dans l'opcode pour ces opérations. Si le mot avait une largeur de 33 bits, il en faudrait 6 sinon il ne pourrait pas couvrir tout le mot, mais ce serait également le cas si le mot avait une largeur de 64 bits.
Les bits d'un opcode sont extrêmement précieux, donc ils ne veulent généralement pas les gaspiller. Ensuite, il est logique de faire du mot une puissance de 2 de large.
La raison pour laquelle les octets ont une largeur de 8 bits est que c'est la plus petite puissance de deux pouvant contenir un caractère ASCII (qui est de 7 bits).
la source