O que é binário?
Por que computadores falam em 0s e 1s
Você conta usando dez dígitos: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Esse é o sistema decimal (base-10), e você o usa porque tem dez dedos.
Computadores não têm dedos. Eles têm transistores, minúsculas chaves eletrônicas. Os circuitos do computador tratam cada um como ligado ou desligado. Para a lógica, não existe "meio ligado" ou "quase desligado". Apenas dois estados.
Por causa dessa limitação física, computadores usam o sistema binário (base-2), que tem apenas dois dígitos: 0 e 1.
Transistor DESLIGADO = 0
Transistor LIGADO = 1
Cada número, cada letra, cada pixel de cada imagem, cada byte de cada arquivo Ruby: tudo é armazenado como uma sequência de 0s e 1s dentro do seu computador.
Contando em binário
No decimal, quando você esgota os dígitos (depois do 9), adiciona uma nova coluna à esquerda e recomeça:
8, 9, 10, 11, 12, ...
O binário funciona da mesma forma, mas você esgota os dígitos depois do 1:
Decimal: 0 1 2 3 4 5 6 7 8
Binário: 0 1 10 11 100 101 110 111 1000
Vamos entender como as colunas binárias funcionam:
Colunas decimais (base-10):
1000s 100s 10s 1s
1 2 5 3 = 1×1000 + 2×100 + 5×10 + 3×1 = 1253
Colunas binárias (base-2):
128s 64s 32s 16s 8s 4s 2s 1s
1 0 0 1 1 0 1 0 = 128+16+8+2 = 154
Cada coluna no binário é uma potência de 2 (1, 2, 4, 8, 16, 32, 64, 128...), assim como cada coluna no decimal é uma potência de 10.
As potências de 2: o melhor amigo do desenvolvedor
Esses números vão aparecer em toda a sua carreira:
| Potência | Valor | Onde Você Vê |
|---|---|---|
| 2⁰ | 1 | Um único bit |
| 2¹ | 2 | Booleano: true/false |
| 2³ | 8 | Um byte (8 bits) |
| 2⁸ | 256 | Valores de cor RGB (0-255) |
| 2¹⁰ | 1.024 | 1 KiB (muitas vezes escrito KB) |
| 2¹⁶ | 65.536 | Faixa de portas TCP |
| 2²⁰ | 1.048.576 | 1 MB (megabyte) |
| 2³⁰ | 1.073.741.824 | 1 GB (gigabyte) |
| 2³² | 4.294.967.296 | Limite de endereços IPv4 |
Quando uma coluna no banco de dados é integer (32-bit com sinal), seu valor máximo é 2³¹ - 1 = 2.147.483.647. Acima disso, você precisa de bigint (64-bit). O Rails cria chaves primárias bigint por padrão desde o Rails 5.1, então esse limite pega mais tabelas antigas e colunas integer comuns.
Binário em Ruby
O Ruby permite escrever números diretamente em binário usando o prefixo 0b:
0b1010 # => 10
0b11111111 # => 255
0b10000000 # => 128
Você também pode converter entre decimal e binário:
# Decimal para string binária
42.to_s(2) # => "101010"
255.to_s(2) # => "11111111"
# String binária para decimal
"101010".to_i(2) # => 42
"11111111".to_i(2) # => 255
Isso não é só curiosidade: você vai usar operações binárias ao trabalhar com:
- Permissões de arquivo (
chmod 755na verdade são flags binárias) - Flags bitwise (feature toggles armazenados como um único inteiro)
- Máscaras de rede (sub-redes IP usam operações AND binárias)
- Valores de cor (canais RGB empacotados em inteiros)
Convertendo decimal para binário manualmente
Para converter um número decimal para binário, divida repetidamente por 2 e colete os restos:
42 ÷ 2 = 21 resto 0 ─┐
21 ÷ 2 = 10 resto 1 │
10 ÷ 2 = 5 resto 0 │ Leia os restos
5 ÷ 2 = 2 resto 1 │ de BAIXO para CIMA:
2 ÷ 2 = 1 resto 0 │ 101010
1 ÷ 2 = 0 resto 1 ─┘
42 em decimal = 101010 em binário ✓
Verificação: 1×32 + 0×16 + 1×8 + 0×4 + 1×2 + 0×1 = 32 + 8 + 2 = 42 ✓
Por que isso importa para devs Rails
Você pode pensar: "Eu escrevo Ruby, não binário. Por que deveria me importar?"
-
IDs no banco de dados: Quando uma coluna de id
integerchega a 2.147.483.647 (2³¹ - 1), os inserts falham. Ousers.iddeste app ébigint, então isso não acontece. Entender binário te diz por quê e quando. -
Codificação de caracteres: Um emoji UTF-8 como 😀 ocupa 4 bytes (32 bits). O
varchar(1)do PostgreSQL conta caracteres, então o emoji cabe, mas ainda ocupa 4 bytes. Qualquer limite medido em bytes vê que "1 caractere" ≠ "1 byte". -
Permissões:
chmod 755significa111 101 101em binário: o dono pode ler/escrever/executar, o grupo e outros podem ler/executar. -
Performance: Operações bitwise (
&,|,^,<<,>>) estão entre as operações mais rápidas que uma CPU consegue fazer, em geral um único ciclo de clock no nível do hardware.
Resumo
| Conceito | O que Significa |
|---|---|
| Binário (base-2) | Sistema numérico com apenas 0 e 1 |
| Transistor | Chave física: LIGADO (1) ou DESLIGADO (0) |
| Potências de 2 | Valores das colunas: 1, 2, 4, 8, 16, 32, 64, 128... |
Prefixo 0b |
Sintaxe Ruby para literais binários (0b1010 = 10) |
.to_s(2) |
Converte inteiro para string binária em Ruby |
.to_i(2) |
Converte string binária para inteiro em Ruby |
| Limite do inteiro 32-bit | 2.147.483.647: saiba quando usar bigint |
Continue com a aula 2
Bits e bytes: unidades de dados
Bits, bytes, KB e KiB, bits e bytes em redes, e como o Ruby mede o tamanho de strings e objetos.
Com uma conta grátis você também tem os quizzes, seu progresso e suas anotações, e a discussão.