Como funcionam os bits e bytes na memória do computador

10

Se você possui um computador há mais tempo do que uma pausa para o café, já viu os termos bits e bytes usados por aí. Eles são as unidades padrão para medir RAM, capacidade do disco rígido e tamanhos de arquivos em qualquer visualizador de arquivos moderno.

Você pode ouvir um discurso de vendas afirmando que uma máquina tem um processador Pentium de 32 bits com 64 megabytes de RAM e 2,1 gigabytes de espaço em disco rígido. Essas especificações aparecem constantemente em guias técnicos e tutoriais. Compreender o que esses termos realmente significam ajuda você a parar de adivinhar e a começar a saber.

Números decimais

Para entender um pouco, compare-o com algo familiar: dígitos.

Um dígito é um espaço único para um valor entre 0 e 9. Nós os combinamos para formar números maiores. Pegue 6.357. Possui quatro dígitos. O 7 fica na “posição 1”. O 5 está na casa das 10. O 3 está na casa dos 100. O 6 ocupa o lugar dos 1.000.

Você pode escrever isso explicitamente:

(6 * 1000) + (3 * 100) + (5 * 10) + (7 * 1) = 6000 + 300 + 50 + 7 = 6357

Ou use potências de 10. Usando o símbolo de circunflexo (^) para “elevado a”, fica assim:

(6 * 10 ^ 3) + (3 * 10 ^ 2) + (5 * 10 ^ 1) + (10 ^ 0) = 6.000 + 300 + 50 + 7 = 6.357

Cada dígito é um espaço reservado para a próxima potência maior de 10. O primeiro dígito começa em 10^0.

Isso parece normal porque usamos um sistema de base 10 diariamente. Provavelmente existe porque os humanos têm dez dedos. Se evoluíssemos com oito dedos, provavelmente usaríamos um sistema de base 8. Você pode usar qualquer base que desejar. Bases diferentes fazem sentido em contextos diferentes.

Os computadores usam o sistema numérico de base 2. Também é conhecido como sistema numérico binário.

O sistema Base-2 e o byte de 8 bits

Os computadores usam base 2 porque é barato. Você poderia construir um computador de base 10. Seria terrivelmente caro. O hardware Base-2 é relativamente acessível.

Portanto, os computadores usam números binários. Eles usam dígitos binários em vez de dígitos decimais. A palavra bit abrevia “Binary digIT”.

Os dígitos decimais têm 10 valores: 0 a 9. Os bits têm apenas dois valores: 0 e 1. Um número binário é apenas uma sequência de 0 e 1, como 1011.

Para encontrar o valor, use potências de base 2 em vez de base 10.

(1 * 2 ^ 3) + (0 * 2 ^ 2) + (1 * 2 ^ 1) + (1 * 2 ^ 0) = 8 + 0 + 2 + 1 = 11

Cada bit representa potências crescentes de 2. A contagem em binário é simples. Aqui está como decimal e binário se comparam de 0 a 20:

  • 0 = 0
  • 1 = 1
  • 2 = 10
  • 3 = 11
  • 4 = 100
  • 5 = 101
  • 6 = 110
  • 7 = 111
  • 8 = 1000
  • 9 = 1001
  • 10 = 1010
  • 11 = 1011
  • 12 = 1100
  • 13 = 1101
  • 14 = 1110
  • 15 = 1111
  • 16 = 10.000
  • 17 = 10001
  • 18 = 10010
  • 19 = 10011
  • 20 = 10100

Observe a transferência. No número 2, o binário é carregado pela primeira vez. Se um bit for 1 e você adicionar 1, ele se tornará 0 e o próximo bit se tornará 1. Passar de 15 para 16 passa por quatro bits, transformando 1111 em 10.000.

Os bits raramente viajam sozinhos. Eles são agrupados em coleções de 8 bits. Esses pacotes são chamados de bytes.

Por que oito bits em um byte? É como perguntar por que há 12 ovos em uma dúzia. As pessoas optaram pelos 8 bits por tentativa e erro nos últimos 50 anos.

Com 8 bits, você pode representar 256 valores. Eles variam de 0 a 255.

  • 0 = 00000000
  • 1 = 00000001
  • 2 = 00000010
  • 254 = 11111110
  • 255 = 11111111

Em Como funcionam os CDs, você aprende que um CD usa 2 bytes por amostra. Isso é 16 bits. Cada amostra pode variar de 0 a 65.535.

  • 0 = 0000000000000000
  • 1 = 0000000000000001
  • 2 = 0000000000000010
  • 65534 = 1111111111111110
  • 65535 = 1111111111111111

A seguir, veremos uma maneira como os bytes são usados.

Como a codificação ASCII e a matemática binária potencializam seus dados

Texto não é mágico. São apenas números fantasiados.

Quando você digita uma frase, seu computador não vê as letras. Ele vê valores binários. Especificamente, ele depende do conjunto de caracteres ASCII padrão para transformar as teclas digitadas em dados. Neste sistema, cada valor binário de 0 a 127 é mapeado para um caractere específico. A maioria dos sistemas estende isso para 256 valores usando um byte completo, adicionando letras acentuadas e símbolos para idiomas internacionais.

Mas os 128 códigos principais são onde reside a base.

Considere o Bloco de Notas do Windows 95/98. Se você digitar “Quatro pontos e sete anos atrás”, o software alocará exatamente um byte de memória por caractere. Isso inclui os espaços entre as palavras. O espaço é o código ASCII 32. O ponto final é 46. ‘A’ é 65.

Experimente você mesmo.

Crie um arquivo chamado getty.txt. Digite essa frase. Salve-o. Abra seu explorador de arquivos. O tamanho é 30 bytes. Por que? Porque existem 30 caracteres. Adicione uma palavra. O arquivo aumenta de acordo com o número de letras dessa palavra. É uma proporção direta de 1:1.

Abra o arquivo como dados brutos e as letras desaparecerão. Você vê números.

Estas são representações decimais de códigos ASCII. Para ser tecnicamente preciso, a máquina só vê binário. 32 torna-se 00100000. Mas a lógica é válida: cada byte contém um caractere.

Os primeiros 32 valores (0 a 31) não são letras. Eles são códigos de controle. Retorno de transporte. Alimentação de linha. A campainha toca. Os caracteres imprimíveis reais começam em 32. A pontuação vem a seguir. Depois dígitos. Depois em maiúscula. Em seguida, minúsculas. Você pode ver o gráfico completo em Unicode.org, mas o princípio é simples. O armazenamento de texto é apenas uma lista desses números inteiros.

Noções básicas sobre prefixos de bytes e matemática binária

Depois de compreender que os dados são apenas bytes, você se depara com um novo problema: escala.

Um byte é pequeno. A maioria dos arquivos são enormes. Portanto, precisamos de prefixos.

Usamos prefixos de bytes para denotar magnitude. Quilo, mega, giga. Estes não são apenas termos de marketing. Eles são multiplicadores binários.

  • Quilo (K): $2^{10}$ = 1.024 bytes
  • Mega (M): $2^{20}$ = 1.048.576 bytes
  • Giga (G): $2^{30}$ = 1.073.741.824 bytes
  • Tera (T): $2^{40}$ = ~1,1 trilhão de bytes
  • Peta (P): $2^{50}$ = ~1,1 quatrilhão de bytes
  • Exa (E): $2^{60}$ = ~1,1 quintilhão de bytes
  • Zetta (Z): $2^{70}$
  • Yotta (Y): $2^{80}$

Quilo é aproximadamente mil. Mega é um milhão. Giga é um bilhão.

Quando alguém afirma que seu disco rígido tem “2 gigabytes”, isso significa $2 \times 2^{30}$ bytes. Exatamente 2.147.483.648 bytes.

Isso parece abstrato até você visualizar os dados. Um CD padrão contém cerca de 650 megabytes. Três CDs ocupam uma unidade de 2 GB. Um banco de dados de terabytes é comum. Provavelmente existem bancos de dados de petabytes nas principais instalações governamentais. A escala cresce exponencialmente.

Isso nos leva à matemática binária.

Funciona como matemática decimal, com uma restrição estrita. Cada bit só pode ser 0 ou 1.

Em decimal, contamos de 0 a 9. Quando acertamos 9 e adicionamos 1, carregamos o 1 para a próxima coluna. O binário funciona de forma idêntica, mas o transporte acontece mais rápido.

Faça a adição decimal:

Comece certo. $2+1=3$. Próxima coluna: $5+5=10$. Escreva 0, carregue 1. Próximo: $4+7+1(carry)=12$. Escreva 2, carregue 1. Final: $0+0+1=1$. Resultado: 1203.

Agora, binário.

Bit mais à direita: $0+1=1$. Sem transporte.
Segundo bit: $1+1=10$. Escreva 0, carregue 1.
Terceiro bit: $0+1+1(transporte)=10$. Escreva 0, carregue 1.
Quarto bit: $0+0+1(transporte)=1$.

O resultado é 1001. Em decimal, é 9. A matemática é idêntica. A representação é apenas base 2 em vez de base 10.

O resultado final

Bits são dígitos binários. Eles são 0 ou 1.
Bytes são grupos de 8 bits.
O texto é apenas uma sequência de bytes mapeados em códigos ASCII.
O tamanho do armazenamento é medido em potências binárias de 1.024.

Não é complicado. É simplesmente fundamental.

Para se aprofundar na lógica booleana e nas implementações de portas, veja como funciona a adição booleana. O resto é apenas contar em binário.