1. Por que binário: dois estados, dois algarismos
O sistema decimal (base 10) que você usa desde criança tem 10 algarismos (0 a 9) porque humanos têm 10 dedos — é uma escolha de conveniência histórica, não matemática. Um computador não tem dedos; ele tem transistores, e cada transistor, no nível mais básico, só confiavelmente distingue dois estados elétricos: corrente passando ou corrente não passando. Ligado/desligado. Alta tensão/baixa tensão.
Representar mais de dois estados de forma confiável (por exemplo, dez níveis de tensão diferentes) é tecnicamente possível, mas seria muito mais sensível a ruído elétrico e caro de fabricar em escala de bilhões de unidades. Dois estados é o ponto ótimo de simplicidade e confiabilidade — e é exatamente aí que a álgebra booleana do capítulo anterior se encaixa perfeitamente: dois valores lógicos (V/F), dois estados elétricos (ligado/desligado), dois algarismos (0/1). Tudo a mesma ideia, três nomes diferentes.
Por isso o sistema binário (base 2) é a linguagem nativa de qualquer computador digital. Cada algarismo binário é chamado de bit (binary digit).
2. Convertendo decimal → binário
O método mais direto é dividir repetidamente por 2, anotando o resto de cada divisão, até chegar a zero. Depois, lê-se os restos de baixo para cima.
Converter 41 para binário:
41 ÷ 2 = 20 resto 1
20 ÷ 2 = 10 resto 0
10 ÷ 2 = 5 resto 0
5 ÷ 2 = 2 resto 1
2 ÷ 2 = 1 resto 0
1 ÷ 2 = 0 resto 1
Lendo os restos de baixo para cima: 101001
41 (decimal) = 101001 (binário)
Outro jeito de pensar, útil para conferir o resultado: cada posição do número binário vale uma potência de 2, da direita para a esquerda (2⁰, 2¹, 2², 2³...). Somando as posições que têm o algarismo 1:
101001
543210 ← posições (potências de 2)
1×2⁵ + 0×2⁴ + 1×2³ + 0×2² + 0×2¹ + 1×2⁰
= 32 + 0 + 8 + 0 + 0 + 1
= 41 ✓
3. Convertendo binário → decimal
É o processo inverso: multiplique cada bit pela potência de 2 da sua posição e some tudo — exatamente o cálculo de "conferência" que você acabou de ver acima. Não existe atalho especial, o mesmo procedimento serve nos dois sentidos.
Em qualquer linguagem, parseInt("101001", 2) (JS) ou
Convert.ToInt32("101001", 2) (C#) fazem exatamente essa
conta para você. Mas entender o algoritmo manual ajuda a entender por que
overflow de inteiro, máscaras de bits e operadores como <<
(deslocamento) funcionam do jeito que funcionam.
4. Hexadecimal: um "atalho" compacto para binário
O sistema hexadecimal (base 16) usa 16 algarismos: 0-9 e depois A, B, C, D, E, F para representar 10 a 15. À primeira vista parece só "mais uma base", mas ele tem uma propriedade especial que o torna extremamente usado em computação: 16 = 2⁴, então cada dígito hexadecimal representa exatamente 4 bits (um "nibble"), sem sobra e sem resto.
Isso torna a conversão binário ↔ hexadecimal muito mais rápida que decimal ↔ binário: basta agrupar o binário em blocos de 4 bits, da direita para a esquerda, e converter cada bloco separadamente.
Converter 11010110 para hexadecimal:
Agrupar em blocos de 4 bits: 1101 | 0110
Converter cada bloco: 13 | 6
Em hexadecimal: D | 6
11010110 (binário) = D6 (hexadecimal)
| Binário (4 bits) | Decimal | Hexadecimal |
|---|---|---|
| 1010 | 10 | A |
| 1011 | 11 | B |
| 1100 | 12 | C |
| 1101 | 13 | D |
| 1110 | 14 | E |
| 1111 | 15 | F |
Você já usa hexadecimal sem perceber toda vez que escreve uma cor CSS como
#FF5733. São três pares de dígitos hex — um para vermelho
(FF = 255), um para verde (57 = 87)
e um para azul (33 = 51) — cada par representando exatamente
um byte (8 bits = dois blocos de 4 bits). Endereços de memória e hashes (como commits do
Git) também costumam ser exibidos em hexadecimal pelo mesmo motivo: é compacto e mapeia
direto para binário.
5. Octal: mais raro hoje, mas com a mesma lógica
O sistema octal (base 8) segue a mesma ideia do hexadecimal — como 8 = 2³,
cada dígito octal representa exatamente 3 bits. Ele já foi mais popular (permissões de
arquivo em sistemas Unix/Linux, como chmod 755, ainda usam
octal até hoje), mas perdeu espaço para o hexadecimal porque 4 bits se alinham melhor com o
tamanho de byte (8 bits) usado universalmente pela memória dos computadores modernos.
6. Tabela comparativa: decimal, binário, octal e hexadecimal
Vale memorizar de cabeça pelo menos os primeiros valores — eles aparecem o tempo todo em depuração de bits, máscaras e leitura de dumps de memória.
| Decimal | Binário | Octal | Hexadecimal |
|---|---|---|---|
| 0 | 0000 | 0 | 0 |
| 1 | 0001 | 1 | 1 |
| 2 | 0010 | 2 | 2 |
| 3 | 0011 | 3 | 3 |
| 4 | 0100 | 4 | 4 |
| 5 | 0101 | 5 | 5 |
| 6 | 0110 | 6 | 6 |
| 7 | 0111 | 7 | 7 |
| 8 | 1000 | 10 | 8 |
| 9 | 1001 | 11 | 9 |
| 10 | 1010 | 12 | A |
| 11 | 1011 | 13 | B |
| 12 | 1100 | 14 | C |
| 13 | 1101 | 15 | D |
| 14 | 1110 | 16 | E |
| 15 | 1111 | 17 | F |
| 16 | 10000 | 20 | 10 |
Repare que 16 em hexadecimal é escrito 10 — mesma "forma"
visual do decimal 10, mas valor completamente diferente. A base em que um número está
escrito nunca é opcional de saber; por isso é comum ver prefixos como
0x (hexadecimal) ou 0b (binário)
em código para deixar isso explícito — 0x10 em C#/JS vale 16
em decimal, não 10.
7. Onde isso te leva
Feche este módulo e olhe para trás: você agora tem lógica proposicional (o que é uma
condição e como combiná-las), álgebra booleana e portas lógicas (como essas condições viram
circuitos físicos), conjuntos e funções (a base formal de coleções e de toda função que você
já escreveu), e sistemas de numeração (como qualquer dado, de um número a uma cor, vira
sequência de bits). Essa é literalmente a matemática por trás de todo
if, todo tipo booleano e toda representação de dado, em
qualquer linguagem de programação — não é conhecimento específico de uma
tecnologia, é o chão comum debaixo de todas elas.
O próximo módulo, Algoritmos e Estruturas de Dados, parte exatamente daqui: agora que você sabe raciocinar formalmente sobre condições, conjuntos e representação binária de dados, o próximo passo é aprender a organizar e processar esses dados de forma eficiente — pilhas, filas, listas, busca, ordenação, complexidade de algoritmos. Só depois disso o curso entra, finalmente, em C# propriamente dito — e você vai chegar lá com uma base que a maioria de quem aprende programação "direto no código" nunca para para construir.