Sistemas de Numeração
Vídeo da aula estará disponível em breve
Por que bases numéricas importam
Computadores digitais operam com dois níveis de tensão — alto e baixo — que representamos como 1 e 0. Toda informação, desde textos até vídeos, precisa ser codificada nessa base binária. Entender sistemas de numeração é o primeiro passo para compreender como hardware digital processa dados.
Nesta aula, vamos trabalhar com quatro bases principais:
- Binária (base 2) — dígitos: 0, 1
- Octal (base 8) — dígitos: 0 a 7
- Decimal (base 10) — dígitos: 0 a 9
- Hexadecimal (base 16) — dígitos: 0 a 9, A a F
Notação posicional
Em qualquer base b, o valor de um número com n dígitos é dado pela soma ponderada:
N = d(n-1) × b^(n-1) + d(n-2) × b^(n-2) + ... + d(1) × b^1 + d(0) × b^0
Exemplo em base 10:
1472₁₀ = 1×10³ + 4×10² + 7×10¹ + 2×10⁰
= 1000 + 400 + 70 + 2
= 1472
Exemplo em base 2:
1011₂ = 1×2³ + 0×2² + 1×2¹ + 1×2⁰
= 8 + 0 + 2 + 1
= 11₁₀
Para partes fracionárias, os pesos continuam com expoentes negativos: b⁻¹, b⁻², etc.
101.11₂ = 1×2² + 0×2¹ + 1×2⁰ + 1×2⁻¹ + 1×2⁻²
= 4 + 0 + 1 + 0.5 + 0.25
= 5.75₁₀
Conversão entre bases
Decimal para binário — divisões sucessivas
Para converter um número inteiro decimal para binário, dividimos sucessivamente por 2 e coletamos os restos de baixo para cima:
45 ÷ 2 = 22 resto 1 ↑
22 ÷ 2 = 11 resto 0 │
11 ÷ 2 = 5 resto 1 │ Leitura de baixo
5 ÷ 2 = 2 resto 1 │ para cima
2 ÷ 2 = 1 resto 0 │
1 ÷ 2 = 0 resto 1 │
Resultado: 45₁₀ = 101101₂
Verificação: 32 + 0 + 8 + 4 + 0 + 1 = 45 ✓
Binário para octal e hexadecimal
Como 8 = 2³ e 16 = 2⁴, a conversão entre binário e octal/hex é direta — basta agrupar bits:
Binário → Octal: agrupar de 3 em 3 (da direita para a esquerda)
101 101₂ = (101)(101)₂ = 5 5₈ = 55₈
Binário → Hexadecimal: agrupar de 4 em 4
0010 1101₂ = (0010)(1101)₂ = 2 D₁₆ = 2D₁₆
Tabela de referência rápida:
Bin Oct Hex │ Bin Oct Hex
000 0 0 │ 1000 - 8
001 1 1 │ 1001 - 9
010 2 2 │ 1010 - A
011 3 3 │ 1011 - B
100 4 4 │ 1100 - C
101 5 5 │ 1101 - D
110 6 6 │ 1110 - E
111 7 7 │ 1111 - F
#FF00AA), e dumps de dados usam hex porque é compacto e tem correspondência direta com bits.
Código BCD (Binary-Coded Decimal)
O BCD representa cada dígito decimal individualmente em 4 bits. Diferente da conversão binária pura, cada dígito decimal ocupa seu próprio grupo de 4 bits:
Número decimal: 93
BCD: 1001 0011 (9 → 1001, 3 → 0011)
Binário puro: 0101 1101 (93₁₀ = 01011101₂)
Os dois são diferentes! BCD usa mais bits, mas facilita
a exibição em displays de 7 segmentos e cálculos decimais.
Mais exemplos:
47₁₀ em BCD = 0100 0111
256₁₀ em BCD = 0010 0101 0110
BCD é usado em calculadoras, relógios digitais e qualquer sistema onde a exibição decimal direta é prioritária. A desvantagem é o desperdício: com 4 bits podemos representar 0-15, mas BCD só usa 0-9, desperdiçando 6 combinações.
Representação de números negativos
Sinal-magnitude
O bit mais significativo (MSB) indica o sinal: 0 = positivo, 1 = negativo. Os demais bits representam o valor absoluto.
+5 = 0101
-5 = 1101
Problema: existem dois zeros!
+0 = 0000
-0 = 1000
Faixa com n bits: -(2^(n-1) - 1) a +(2^(n-1) - 1)
Com 4 bits: -7 a +7 (15 valores, não 16)
Complemento de 1
Para negar um número, invertemos todos os bits:
+5 = 0101
-5 = 1010 (inversão bit a bit)
Ainda tem dois zeros:
+0 = 0000
-0 = 1111
Faixa: -7 a +7
Complemento de 2 — o padrão moderno
Complemento de 2 = complemento de 1 + 1. É o sistema usado em praticamente todos os processadores modernos porque tem um único zero e a aritmética funciona naturalmente:
Para negar: inverte todos os bits e soma 1.
+5 = 0101
~5 = 1010 (inversão)
-5 = 1011 (1010 + 1)
Verificação: 0101 + 1011 = 10000 (carry descartado) = 0000 ✓
Tabela completa (4 bits):
Binário Decimal
0111 +7
0110 +6
0101 +5
0100 +4
0011 +3
0010 +2
0001 +1
0000 0
1111 -1
1110 -2
1101 -3
1100 -4
1011 -5
1010 -6
1001 -7
1000 -8 ← um valor negativo a mais!
Faixa com n bits: -2^(n-1) a +(2^(n-1) - 1)
Com 8 bits: -128 a +127
Com 16 bits: -32768 a +32767
Com 32 bits: -2.147.483.648 a +2.147.483.647
Aritmética binária básica
A soma binária segue as mesmas regras da soma decimal, com carry:
Regras básicas:
0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 10 (0 com carry 1)
1 + 1 + 1 = 11 (1 com carry 1)
Exemplo: 1011 + 0110
1 1 1 ← carries
1 0 1 1 (11)
+ 0 1 1 0 ( 6)
-----------
1 0 0 0 1 (17)
Subtração via complemento de 2:
A - B = A + (-B) = A + (~B + 1)
7 - 3 em 4 bits:
0111 + 1101 = 10100
Descarta carry → 0100 = 4 ✓
No harness.os
Sistemas de numeração aparecem em toda a stack do harness.os:
- Endereços de memória — exibidos em hexadecimal no debugger. Quando um agente inspeciona um crash dump, ele lê endereços como
0x7FFE_A3B0. - Flags e bitmasks — permissões, feature flags e estados de configuração são frequentemente armazenados como campos de bits. Um inteiro de 32 bits pode conter 32 flags booleanas independentes.
- Representação de dados — UUIDs no banco de dados do harness (
purple-cell-95681470) são internamente números de 128 bits representados em hexadecimal. - Complemento de 2 em timestamps — diferenças de tempo podem ser negativas (evento futuro agendado). A representação em complemento de 2 garante que a aritmética de comparação funcione sem casos especiais.
Exercícios
- Conversões: Converta 173₁₀ para binário, octal e hexadecimal. Verifique cada resultado convertendo de volta para decimal.
- Complemento de 2: Represente -42 em complemento de 2 com 8 bits. Em seguida, calcule 100 + (-42) em binário e verifique que o resultado é 58.
- BCD: Codifique 2048₁₀ em BCD e em binário puro. Quantos bits cada representação ocupa? Qual é mais eficiente?
Resumo
Verifique seu entendimento
Em complemento de 2 com 8 bits, qual é o valor decimal de 11010110₂?
- Notação posicional: o valor de cada dígito depende da sua posição e da base
- Conversão decimal→binário: divisões sucessivas por 2
- Binário↔octal: grupos de 3 bits; binário↔hex: grupos de 4 bits
- BCD codifica cada dígito decimal em 4 bits independentes
- Complemento de 2 é o padrão para inteiros com sinal: inverte e soma 1
- Overflow ocorre quando o resultado excede a faixa representável