Nesta aula demos continuidade aos fundamentos matemáticos da computação, focando nos sistemas de numeração que formam a base de como os computadores representam e manipulam dados. Vimos que, embora os humanos usem naturalmente o sistema decimal (base 10), as máquinas operam internamente com o sistema binário (base 2), e que outros sistemas como octal (base 8) e hexadecimal (base 16) são atalhos convenientes para representar valores binários de forma mais compacta.
Ao final da aula você será capaz de converter números entre bases, realizar operações aritméticas simples em binário e entender a representação de números negativos usando complemento de dois.
Sistemas de numeração
Um sistema de numeração é definido por uma base (ou raiz), que determina a quantidade de dígitos disponíveis e o valor posicional de cada algarismo. Os sistemas mais relevantes para a computação são:
| Sistema | Base | Dígitos | Exemplo |
|---|---|---|---|
| Decimal | 10 | 0–9 | 255 |
| Binário | 2 | 0,1 | 11111111 |
| Octal | 8 | 0–7 | 377 |
| Hexadecimal | 16 | 0–9, A–F | FF |
Cada dígito em uma posição representa um múltiplo de uma potência da base. Por exemplo, o número binário 1101 equivale a:
1×2³ + 1×2² + 0×2¹ + 1×2⁰ = 8 + 4 + 0 + 1 = 13 (decimal)
Conversão entre bases
De decimal para binário (divisões sucessivas)
Dividimos o número decimal por 2 repetidamente, anotando os restos (0 ou 1) de baixo para cima:
255 ÷ 2 = 127 resto 1
127 ÷ 2 = 63 resto 1
63 ÷ 2 = 31 resto 1
31 ÷ 2 = 15 resto 1
15 ÷ 2 = 7 resto 1
7 ÷ 2 = 3 resto 1
3 ÷ 2 = 1 resto 1
1 ÷ 2 = 0 resto 1
→ 255₁₀ = 11111111₂
De binário para decimal (soma de potências)
Multiplicamos cada bit por 2 elevado à posição (da direita para a esquerda, começando em 0):
1011₂ = 1×2³ + 0×2² + 1×2¹ + 1×2⁰ = 8 + 0 + 2 + 1 = 11₁₀
Conversão envolvendo octal e hexadecimal
Como 8 = 2³ e 16 = 2⁴, a conversão entre binário e esses sistemas é direta:
- Binário → Octal: agrupe os bits de 3 em 3 (da direita) e converta cada grupo.
- Binário → Hexadecimal: agrupe de 4 em 4.
- Octal/Hexadecimal → Binário: substitua cada dígito pelo seu equivalente de 3 ou 4 bits.
Binário: 11010111₂
Agrupar (octal): 11 010 111 → 3 2 7 → 327₈
Agrupar (hexa): 1101 0111 → D 7 → D7₁₆
Um pequeno helper em Python para visualizar conversões:
def binario(n):
return bin(n)[2:]
def octal(n):
return oct(n)[2:]
def hexadecimal(n):
return hex(n)[2:].upper()
n = int(input("Número decimal: "))
print(f"Binário: {binario(n)}")
print(f"Octal: {octal(n)}")
print(f"Hexadecimal: {hexadecimal(n)}")
Aritmética binária
Adição
As regras básicas:
- 0 + 0 = 0
- 0 + 1 = 1
- 1 + 0 = 1
- 1 + 1 = 0 (vai 1 para a próxima coluna)
- 1 + 1 + 1 = 1 (vai 1)
1011 (11)
+ 1101 (13)
-----------
11000 (24)
Subtração e complemento de dois
Para subtrair, podemos usar o complemento de dois (negação). Para obter o complemento de dois de um número binário:
- Inverta todos os bits (complemento de um).
- Some 1 ao resultado.
Isso permite representar números negativos e realizar subtração via soma.
Exemplo: 5₁₀ = 0101₂
Complemento de um: 1010₂
Soma 1: 1011₂ → -5₁₀ representado em 4 bits
Para subtrair 3 de 5 (5 − 3):
0101 (+5)
+ 1101 (−3 em complemento de dois)
------------
10010 → descarta o carry do 4º bit → 0010₂ = 2₁₀
Resumo dos tópicos abordados
- Sistemas de numeração: decimal, binário, octal, hexadecimal e suas bases.
- Conversão entre decimal e binário (divisões sucessivas e soma de potências).
- Conversão rápida entre binário, octal e hexadecimal usando agrupamento.
- Adição binária com carry.
- Complemento de dois para representação de números negativos e subtração binária.
- Exemplo prático de código Python para conversão de bases.
Perguntas frequentes
Por que os computadores usam o sistema binário?
Porque componentes eletrônicos digitais trabalham naturalmente com dois estados (ligado/desligado, alta/baixa tensão), o que mapeia perfeitamente para os bits 0 e 1. Qualquer outro sistema exigiria mais estados e tornaria o hardware mais complexo e menos confiável.
O que é overflow em aritmética binária?
Ocorre quando o resultado de uma operação excede a quantidade de bits reservada para representá-lo. Por exemplo, somar 127 + 1 em 8 bits com sinal resulta em −128 se usarmos complemento de dois. O processador sinaliza overflow através de flags especiais.
Qual a vantagem do hexadecimal sobre o binário?
Hexadecimal é muito mais compacto: um byte (8 bits) pode ser escrito com apenas dois dígitos hexadecimais (00 a FF). Isso facilita a leitura de endereços de memória, códigos de depuração e especificações técnicas.