Introdução
Hoje vamos começar a estudar os sistemas de numeração que são fundamentais para entender como os computadores representam e manipulam dados. Diferente do sistema decimal (base 10) que usamos no dia a dia, os computadores utilizam internamente o sistema binário (base 2) por razões físicas e de confiabilidade. Além do binário, também veremos o sistema hexadecimal (base 16) que é amplamente usado para representar endereços de memória e cores.
Sistema Decimal
O sistema decimal é o que usamos cotidianamente. Ele possui 10 dígitos (0 a 9) e cada posição representa uma potência de 10. Por exemplo, o número 345 significa 3×10² + 4×10¹ + 5×10⁰. É um sistema posicional, onde o valor do dígito depende da sua posição.
Sistema Binário
O sistema binário utiliza apenas dois dígitos: 0 e 1. Cada posição representa uma potência de 2. É o sistema nativo dos circuitos digitais, pois os transistores podem estar em estado ligado (1) ou desligado (0). Por exemplo, o número binário 1101 representa 1×2³ + 1×2² + 0×2¹ + 1×2⁰ = 8 + 4 + 0 + 1 = 13 em decimal.
Para converter um número decimal para binário, podemos usar o método das divisões sucessivas por 2, coletando os restos de baixo para cima:
13 ÷ 2 = 6 resto 1
6 ÷ 2 = 3 resto 0
3 ÷ 2 = 1 resto 1
1 ÷ 2 = 0 resto 1
Lendo os restos de baixo para cima: 1101
Em Python, podemos fazer essa conversão facilmente:
def decimal_para_binario(n):
if n == 0:
return "0"
bits = []
while n > 0:
bits.append(str(n % 2))
n //= 2
return ''.join(reversed(bits))
print(decimal_para_binario(13)) # Saída: 1101
Sistema Hexadecimal
O sistema hexadecimal usa 16 dígitos: de 0 a 9 e as letras A, B, C, D, E, F (que representam 10 a 15). Cada posição é uma potência de 16. É muito usado em computação para representar valores grandes de forma mais compacta que o binário. Por exemplo, o binário 1111 1111 (255 decimal) é representado como FF em hexa.
Converter de binário para hexa é simples: agrupe os bits em grupos de 4 (da direita para a esquerda) e converta cada grupo ao dígito hexa correspondente.
Binário: 1101 0011 (2 bytes)
Grupo 1: 1101 = D
Grupo 2: 0011 = 3
Hexadecimal: D3
Conversão de decimal para hexadecimal:
def decimal_para_hexadecimal(n):
if n == 0:
return "0"
digitos = "0123456789ABCDEF"
resultado = []
while n > 0:
resultado.append(digitos[n % 16])
n //= 16
return ''.join(reversed(resultado))
print(decimal_para_hexadecimal(255)) # Saída: FF
Conversão entre Bases
As conversões mais comuns são entre binário, decimal e hexadecimal. A tabela abaixo mostra alguns valores equivalentes:
| Decimal | Binário | Hexadecimal |
|---|---|---|
| 0 | 0 | 0 |
| 1 | 1 | 1 |
| 2 | 10 | 2 |
| 3 | 11 | 3 |
| 4 | 100 | 4 |
| 5 | 101 | 5 |
| 6 | 110 | 6 |
| 7 | 111 | 7 |
| 8 | 1000 | 8 |
| 9 | 1001 | 9 |
| 10 | 1010 | A |
| 11 | 1011 | B |
| 12 | 1100 | C |
| 13 | 1101 | D |
| 14 | 1110 | E |
| 15 | 1111 | F |
Aplicações Práticas
Os sistemas de numeração são usados em diversas áreas da computação:
- Endereçamento de memória: Endereços são frequentemente representados em hexadecimal por serem mais legíveis que longas sequências de bits.
- Cores em HTML/CSS: As cores são definidas em hexa (ex: #FF0000 para vermelho).
- Máscaras de rede: Em redes de computadores, as máscaras são representadas em binário e decimal.
- Codificação de caracteres: Tabelas como ASCII usam valores binários/hexa para representar caracteres.
Resumo
- Computadores usam o sistema binário (base 2) internamente.
- O sistema decimal (base 10) é o nosso sistema cotidiano.
- O sistema hexadecimal (base 16) é uma representação compacta do binário.
- Conversões entre bases são feitas por divisões sucessivas ou agrupamento de bits.
- Entender esses sistemas é essencial para programação de baixo nível, redes e arquitetura de computadores.
Perguntas Frequentes
Por que os computadores usam binário?
Porque os circuitos digitais são baseados em transistores que podem estar em dois estados estáveis (ligado/desligado), representando 0 e 1. Isso torna o sistema confiável e resistente a ruídos.
Como converter um número decimal para binário manualmente?
Divida o número por 2 sucessivamente, anotando os restos. O binário é a sequência de restos lida de baixo para cima.
Qual a vantagem do hexadecimal sobre o binário?
O hexadecimal é mais compacto e legível para humanos. Um byte (8 bits) pode ser representado por apenas dois dígitos hexa (ex: 11111111 = FF).