Porque é que um byte tem 8 bits? História e uso atual
Perceba por que razão existiram bytes de vários tamanhos, como o octeto de 8 bits se tornou dominante e o que isto significa para números, texto e redes.
Hoje, um byte tem quase sempre oito bits. Esta relação é tão habitual que parece uma lei natural, mas resulta da história do hardware, de convenções de software e da normalização.
Bit, byte e octeto
Um bit tem dois estados, representados por 0 e 1. Com oito posições há 2⁸ = 256 combinações, de 0 a 255 quando interpretadas como um inteiro sem sinal.
Historicamente, byte designava uma unidade endereçável capaz de representar um caráter e o seu tamanho dependia da máquina. Existiram arquiteturas com bytes de 6, 7, 8, 9 ou outros números de bits. Por isso, normas de redes usam muitas vezes a palavra octeto quando precisam de dizer inequivocamente «oito bits».
Porque é que venceu o grupo de oito
Não houve uma única decisão universal. Vários fatores reforçaram a escolha:
- oito bits acomodavam ASCII de 7 bits e deixavam um bit disponível para extensões ou paridade;
- 256 valores eram suficientes para muitos conjuntos de carateres e dados de controlo da época;
- potências de dois simplificavam circuitos, endereçamento e operações binárias;
- máquinas e sistemas comerciais influentes adotaram unidades de 8 bits;
- protocolos, formatos de ficheiro e linguagens passaram a depender dessa escolha.
Depois de software, periféricos e redes convergirem, a interoperabilidade tornou a convenção difícil de alterar.
O valor de cada posição
Num byte interpretado como inteiro binário sem sinal, as posições valem:
128 64 32 16 8 4 2 1
O byte 10100110 representa:
128 + 32 + 4 + 2 = 166
A mesma sequência de bits pode ter outro significado se o tipo mudar: parte de um número com sinal, um canal de cor, um fragmento de texto UTF-8 ou um campo de um protocolo. Os bits não transportam sozinhos a informação sobre como devem ser interpretados.
Texto não significa um byte por caráter
ASCII cabe num byte, mas Unicode contém muito mais do que 256 pontos de código. UTF-8 usa de um a quatro bytes por ponto de código:
Ausa um byte:41em hexadecimal;áusa dois bytes:C3 A1;€usa três bytes:E2 82 AC;- muitos emoji usam quatro bytes.
Além disso, um grafema visível pode combinar vários pontos de código. Por isso, contagens de bytes, pontos de código e símbolos apresentados no ecrã podem ser diferentes.
Números e ordem dos bytes
Um inteiro de 32 bits ocupa normalmente quatro bytes. A ordem desses bytes na memória pode ser little-endian ou big-endian. Esta questão é diferente da ordem dos bits que se escreve dentro de cada byte.
Em redes, a expressão «ordem de bytes de rede» costuma designar big-endian. Formatos e protocolos devem especificar a ordem; não é seguro inferi-la apenas pelo tamanho.
A exceção importante das linguagens
Em C e C++, sizeof(char) é sempre 1 por definição, mas o número de bits desse byte é indicado por CHAR_BIT e a norma não exige universalmente o valor 8. Em plataformas correntes, CHAR_BIT é quase sempre 8. Código que depende exatamente de octetos deve declarar essa suposição ou usar tipos e protocolos adequados.
Explorar os valores
O conversor de binário para decimal mostra o valor numérico de um grupo de bits. A tabela de referência ASCII ajuda a comparar esse valor com carateres básicos, enquanto o guia sobre ASCII, Unicode e UTF-8 explica o passo seguinte.
O byte de oito bits é uma convenção extraordinariamente estável, não uma propriedade inerente da informação. Distinguir convenção, representação e significado torna os formatos binários muito mais fáceis de analisar.