Encontro várias fontes alegando que a potência de dois bits em uma palavra binária (como 8 bits por byte) é uma "coisa boa" ou "conveniente". Não encontro nenhuma fonte que indique o porquê.
De Qual é a história de por que os bytes têm oito bits? lemos na resposta aprovada:
Os computadores binários motivam os designers a criar tamanhos de dois.
OK mas porquê? Na mesma pergunta, mas no campo de comentário da pergunta, encontro:
A última frase está de brincadeira? Um byte de 12 bits seria inconveniente porque não é uma potência de 2. - robjb
Mais uma vez, vazio de lógica ...
cálculos de endereço são muito mais simples com potências de 2, e isso conta quando você está criando lógica de transistores brutos em latinhas - Mike
Como os bytes são a menor unidade endereçável, isso não faz muito sentido. Muitos votos positivos no comentário. Talvez eu tenha perdido alguma coisa.
Da Wikipedia :
O padrão de fato de oito bits é uma potência conveniente de dois, permitindo os valores de 0 a 255 para um byte
E isso seria conveniente porque ...?
Para esclarecimento, trata-se do número de bits por byte (por exemplo, 8 ou 6, etc), não o número de valores por byte (por exemplo, 2 8 ou 2 6 , etc). Por causa da confusão, também aponto que não se trata de tamanhos de palavras.
Não estou muito interessado em razões históricas. Essas foram bem explicadas em outros lugares (ver links).
Pergunta relacionada no SO: /programming/1606827/why-is-number-of-bits-always-a-power-of-two
Respostas:
Eu não acho que os bytes de 8 bits tenham sido bem-sucedidos porque têm uma largura que é uma potência de dois. Se você não deseja endereçar os bits individualmente - e isso é um recurso comum, nem agora nem no passado -, ter um poder de dois não tem importância prática real (é apenas - agora, muito mais do que no passado, quando poupado alguns componentes discretos eram importantes - um reflexo para os engenheiros de hardware e software e permanecer em terreno familiar é importante para outros fins), e não me lembro de ter sido mencionado na minha história de leituras de computação (1). Era necessário letras minúsculas, o que significava algo mais do que os conjuntos de caracteres de 6 bits então dominantes. O ASCII era de 7 bits, mas o ASCII era puramente como para a troca (e, portanto, era traduzido para código interno para manipulação) e, portanto,
e para o hardware, o byte de 8 bits ganhou porque permitiu empacotar 2 dígitos decimais em um byte por vez quando 75% dos dados eram numéricos e representados no BCD (3).
(1) por exemplo, Blaauw e Brooks, Computer Architecture ; MacKenzie, Conjuntos de caracteres codificados, História e desenvolvimento têm uma discussão sobre esse assunto.
(3) Documento de X3.2 - o Subcomitê responsável da ASCII - citado por MacKenzie.
(3) MacKenzie, novamente.
fonte
Além do acidente histórico, não há nenhuma razão específica para usarmos 8/16/32/64 bit. Suponho que 12/24/48/96 bit seria realmente mais útil.
Para manipular texto, o Unicode usando um hipotético UTF-24 seria mais barato que o UTF32; o hipotético UTF-12 armazenaria todos os caracteres UTF-8 de um e dois bytes em 12 bits, e todos os caracteres UTF-8 de três e quatro bytes em 24 bits (o intervalo seria ligeiramente reduzido para 2 ^ 20 caracteres, mas ainda é quatro vezes mais do que é generosamente usado); código seria mais simples porque existem apenas duas variantes.
Para ponto flutuante, 48 bits é geralmente suficiente. 96 bits é substancialmente melhor que 80 bits estendido. 24 bits é útil para gráficos; muito mais útil do que os 16 bits suportados por algumas placas gráficas. Ponteiros de 48 bits podem lidar com 256 terabytes.
A única desvantagem são as matrizes de bits, nas quais uma divisão por 12 é necessária para calcular as posições de bytes. Se isso é importante, tenho certeza de que a divisão por 12 pode ser implementada com bastante eficiência no hardware.
fonte
Isso é conveniente devido às arquiteturas de hardware comuns que usam múltiplos de 8, por exemplo, arquiteturas de 32 e 64 bits. Isso significa maior eficiência ao usar armazenamento e transmissão de dados de 8 bits.
"No entanto, considerações de economia no design pressionam fortemente por um tamanho ou muito poucos tamanhos relacionados por múltiplos ou frações (submúltiplos) a um tamanho primário. Esse tamanho preferido se torna o tamanho da palavra da arquitetura".
Word (arquitetura de computador)
Veja também: Qual é o histórico de por que os bytes têm oito bits?
fonte
2⁸-1
.De acordo com o artigo da Wikipedia por palavra , isso facilita significativamente os cálculos relacionados ao endereçamento de memória:
fonte
Está intimamente relacionado ao espaço de endereço. Ao adicionar um pouco mais ao seu barramento de endereços, você pode endereçar o dobro de locais de memória. Portanto, quando você adiciona essa linha extra, pode usá-la em toda a extensão.
Isso leva a uma progressão natural de 1, 2, 4, 8, 16, 32 e etc.
No nível técnico de produção, também é fácil repetir o mesmo padrão litográfico. Ou seja, dobrá-lo. Se você começar com uma trava e depois dobrar o padrão, passará 8, não 6, 10 ou 12.
fonte
Nem sempre as larguras de palavras são poder de dois. Recentemente, venho desenvolvendo algumas codificações em um SHArC DSP que possui uma largura de palavra de 32 bits para números, mas não para os opcodes (que possuem largura de 48 bits).
Provavelmente, a razão pela qual a largura das palavras é uma potência de dois é por causa de algumas instruções que testam (ou definem ou limpam ou alternam) um único bit ou deslocam (ou giram) para a esquerda ou direita por um número especificado de bits. Há um campo de bits no código de operação para especificar a localização do bit único ou o número de bits a serem deslocados. Se a largura da palavra for uma potência de dois, esse campo de bit exigirá log 2 (largura da palavra) bits para cobrir a palavra inteira. Ou seja, uma palavra com 32 bits de largura precisa de um campo de 5 bits no código de operação para essas operações. Se a palavra tivesse 33 bits de largura, precisaria de 6, caso contrário não poderia abranger a palavra inteira, mas também seria o caso se a palavra tivesse 64 bits de largura.
Os bits em um código de operação são extremamente valiosos, portanto, eles geralmente não querem desperdiçá-los. Então faz sentido tornar a palavra uma potência de 2 de largura.
A razão pela qual os bytes têm 8 bits de largura é que é a menor potência de dois que pode conter um caractere ASCII (que é de 7 bits).
fonte