Sistemas numéricos são a espinha dorsal da computação. Por trás de variáveis, endereços de memória, protocolos de rede e dispositivos eletrônicos, tudo se resume a como representamos e manipulamos números.
Este guia vai te dar uma visão completa, aplicada e técnica dos sistemas de numeração Binário, Octal, Decimal e Hexadecimal, com foco em programação, infraestrutura e estruturas de dados.
Visão Geral: Os 4 Sistemas Numéricos
Sistema | Base | Algarismos usados | Aplicação comum |
---|---|---|---|
Binário | 2 | 0, 1 | Nível de máquina, lógica digital |
Octal | 8 | 0 a 7 | Permissões em Unix, compactação de binário |
Decimal | 10 | 0 a 9 | Uso humano, cálculo cotidiano |
Hexadecimal | 16 | 0 a 9, A a F | Endereçamento, cores CSS, memória, assembly |
1. Sistema Binário (Base 2)
O binário é o idioma nativo dos computadores. Tudo, no fim das contas, vira 0 ou 1.
Cada bit representa uma potência de 2:
Exemplo:
Número binário: 1011
Posições: 3 2 1 0
Potências: 8 4 2 1
Cálculo: (1×8) + (0×4) + (1×2) + (1×1) = 11
Aplicações:
- Flags em programação
- Máscaras de sub-rede (CIDR)
- Bitwise operations (
&
,|
,^
,~
,<<
,>>
) - Representação de permissões, sensores, status binário (ex: ON/OFF)
Exemplo em C:
int flags = 0b1010; // binário no GCC
if (flags & 0b1000) {
// bit 3 está ativo
}
2. Sistema Octal (Base 8)
Cada dígito octal representa 3 bits binários. Mais legível que binário puro.
Exemplo:
Binário: 110 101
Octal: 6 5 → 65₈ = (6×8 + 5) = 53₁₀
Aplicações:
- Permissões de arquivos no Linux (ex:
chmod 755
)7 = rwx
,5 = r-x
,0 = ---
- Interpretação de binários compactados
- Sistemas embarcados legados
Exemplo em shell:
chmod 755 script.sh
# rwxr-xr-x
3. Sistema Decimal (Base 10)
Sistema que usamos no dia a dia. Cada posição vale uma potência de 10.
Exemplo:
Número: 538
= (5×100) + (3×10) + (8×1) = 538
Aplicações:
- Interface com o usuário (valores em input/output)
- Representação de valores financeiros, leitura de logs
- Intermediário entre os outros sistemas
Exemplo em Python:
num = int("1011", 2) # binário → decimal → 11
print(num)
4. Sistema Hexadecimal (Base 16)
Cada dígito hexadecimal representa 4 bits binários. Muito usado em baixo nível, pois é mais compacto e legível.
Exemplo:
Hex: 0x2F
= (2×16) + (15) = 47₁₀
Binário: 0010 1111
Tabela base:
Hex | Binário |
---|---|
0 | 0000 |
1 | 0001 |
… | … |
9 | 1001 |
A | 1010 |
F | 1111 |
Aplicações:
- Endereçamento de memória (ex:
0x7FFF
) - Códigos de cor (
#FF00FF
) - Debug de hardware e firmware
- Representação de MAC/IP/IPv6
Exemplo em C:
uint8_t valor = 0xAF;
printf("%X", valor); // saída: AF
Conversões Práticas
Binário ↔ Decimal
- Binário → Decimal: somar potências de 2
- Decimal → Binário: dividir por 2 e anotar restos
Python:
bin(25) # '0b11001'
int('11001', 2) # 25
Decimal ↔ Hexadecimal
- Decimal → Hex: divide por 16
- Hex → Decimal: somar potências de 16
Exemplo:
hex(255) # '0xff'
int('ff', 16) # 255
Bitwise na Programação
Manipular bits é fundamental para lidar com hardware, compactação, segurança e performance.
Operação | Símbolo | Exemplo | Resultado |
---|---|---|---|
AND | & | 0b1101 & 0b1011 | 0b1001 |
OR | ` | ` | `0b1101 |
XOR | ^ | 0b1101 ^ 0b1011 | 0b0110 |
NOT | ~ | ~0b1101 | depende da linguagem (complemento de 2) |
Shift L | << | 0b0001 << 2 | 0b0100 |
Shift R | >> | 0b1000 >> 3 | 0b0001 |
Redes e Infraestrutura
IPv4 e CIDR (binário e decimal)
IP: 192.168.1.10 → 11000000.10101000.00000001.00001010
Máscara: /24 → 255.255.255.0 → 11111111.11111111.11111111.00000000
MAC Address (hexadecimal)
MAC: 00:1A:2B:3C:4D:5E → 6 bytes → 48 bits → hexadecimal puro
Cores em HTML/CSS
#FF0000 = Red
#00FF00 = Green
#0000FF = Blue
→ Cada par representa um byte (0-255)
Dica Profissional: Use Sempre o Sistema Adequado
Situação | Sistema Ideal |
---|---|
Interface com usuário | Decimal |
Códigos de cor / redes / memória | Hexadecimal |
Lógica de hardware / flags | Binário |
Permissões em sistemas Unix | Octal |
Conclusão
Compreender a fundo os sistemas numéricos e saber transitar entre eles é fundamental para qualquer profissional de tecnologia. Seja programador, sysadmin, devops ou engenheiro eletrônico, dominar essas representações é o que separa o “codador” do arquiteto de sistemas.
Nada no mundo digital existe fora de 0 e 1 — o resto é abstração. Aprender a lidar com essas bases é aprender a falar a língua dos computadores.