Durante a aula de hoje, mergulhamos fundo nos sistemas de numeração que são a base de toda a computação moderna. O objetivo era entender como os computadores representam dados numéricos e como a lógica binária permite realizar operações e tomar decisões dentro do hardware. Vou compartilhar minhas anotações e alguns exemplos que fizemos em sala.

1. Por que o binário?

Diferente dos humanos, que usam o sistema decimal (base 10) naturalmente, os computadores operam em binário (base 2). Isso acontece porque os componentes eletrônicos, como transistores, são naturalmente binários: eles podem estar em estado ligado (1) ou desligado (0). Essa simplicidade permite construir circuitos extremamente rápidos e confiáveis. Cada 0 ou 1 é chamado de bit (binary digit).

2. Sistemas de Numeração

Estudamos os principais sistemas de numeração usados na computação:

  • Binário (Base 2): Dígitos: 0 e 1. Exemplo: 1010₂ = 10₁₀.
  • Octal (Base 8): Dígitos: 0 a 7. Exemplo: 12₈ = 10₁₀.
  • Decimal (Base 10): Dígitos: 0 a 9. O sistema que usamos no dia a dia.
  • Hexadecimal (Base 16): Dígitos: 0 a 9 e A a F. Exemplo: 1A₁₆ = 26₁₀. Muito útil, pois um dígito hexadecimal representa exatamente 4 bits (um nibble). Isso facilita a leitura de sequências longas de bits, como endereços de memória.

3. Conversão Entre Bases

Aprendemos várias técnicas de conversão. As principais foram:

  • Decimal para Binário: Realizar divisões sucessivas por 2. O resto de cada divisão, lido do último para o primeiro, forma o número binário.
  • Binário para Decimal: Multiplicar cada dígito binário (0 ou 1) pela potência de 2 correspondente à sua posição e somar tudo.
  • Decimal para Hexadecimal: Divisões sucessivas por 16.
  • Binário para Hexadecimal: Agrupar os bits em grupos de 4 (da direita para a esquerda) e converter cada grupo no seu equivalente hexadecimal.

Exemplo: Converter o número decimal 47 para binário.

47 / 2 = 23 (resto 1)
23 / 2 = 11 (resto 1)
11 / 2 = 5 (resto 1)
5 / 2 = 2 (resto 1)
2 / 2 = 1 (resto 0)
1 / 2 = 0 (resto 1)

Lendo os restos de baixo para cima: 101111₂.

4. Aritmética Binária

Operações básicas como soma e subtração em binário seguem regras simples. Por exemplo:

0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 0 (vai 1)
1 + 1 + 1 = 1 (vai 1)

Para números negativos, o método mais utilizado é o complemento de 2. Ele consiste em inverter todos os bits do número positivo e somar 1 ao resultado. A grande vantagem é que a operação de subtração vira uma operação de soma, simplificando o hardware do processador.

5. Portas Lógicas e Álgebra Booleana

George Boole criou a álgebra que permite operar com valores verdadeiros (true/false, ou 1/0). As portas lógicas são a implementação física dessas operações.

Entrada A Entrada B AND OR XOR
0 0 0 0 0
0 1 0 1 1
1 0 0 1 1
1 1 1 1 0

A porta NOT inverte a entrada (0 vira 1, 1 vira 0). NAND e NOR são portas universais, pois é possível construir qualquer outra porta lógica utilizando apenas uma delas. Isso é fantástico do ponto de vista da fabricação de chips, pois reduz a variedade de componentes necessários.

Combinando essas portas, podemos construir circuitos complexos como somadores (adder), multiplexadores (MUX) e unidades lógicas e aritméticas (ULA).

6. Aplicações Práticas

  • Endereçamento IP: Um endereço IPv4 é um número de 32 bits, geralmente representado em decimal (ex: 192.168.0.1), mas internamente é puro binário.
  • Máscaras de Rede: Routers usam máscaras de sub-rede (como 255.255.255.0, que em binário é 11111111.11111111.11111111.00000000) para determinar qual parte do endereço IP pertence à rede e qual parte pertence ao host. A operação lógica AND é aplicada bit a bit entre o IP e a máscara.
  • Cores em Hex: Cores em CSS e design gráfico usam 6 dígitos hexadecimais (ex: #FF0000 para vermelho). Os primeiros dois dígitos são o canal Vermelho, os dois do meio Verde e os últimos Azul.
  • Correção de Erros: Códigos de Hamming e outras técnicas de detecção e correção de erros usam fortemente a álgebra booleana e operações binárias (paridade, XOR) para garantir que dados transmitidos não sejam corrompidos.

FAQ — Perguntas Frequentes

1. O que é um nibble?

Um nibble é um conjunto de 4 bits. Como um dígito hexadecimal representa exatamente 4 bits, é comum usar hex para representar um nibble. Ex: o byte 11011010 pode ser representado por dois nibbles: 1101 = D e 1010 = A, formando DA.

2. Por que os sistemas modernos usam base 2 e não base 10?

A principal razão é a confiabilidade. Componentes eletrônicos podem facilmente distinguir entre dois estados (alta tensão/baixa tensão). Distinguir entre 10 estados diferentes (como no decimal) é muito mais complexo, caro e suscetível a ruídos.

3. Qual a diferença entre bit e byte?

Um bit é a menor unidade de informação (0 ou 1). Um byte é um conjunto de 8 bits. Por muito tempo, um byte era a quantidade mínima de dados endereçável em muitos sistemas, sendo suficiente para representar um caractere (na codificação ASCII).

Conclusão

Esta aula estabeleceu uma base sólida para os próximos tópicos, como arquitetura de computadores e sistemas operacionais. A lógica binária e booleana é a linguagem fundamental do hardware, e a compreensão dos sistemas de numeração é essencial para qualquer programador ou profissional de TI. Recomendo praticar bastante as conversões e montar tabelas verdade para fixar o conteúdo. Esses conceitos aparecerão com frequência nos próximos posts do blog.