Representação de Dados

Como números, texto, imagens e som viram bits

Organização de Computadores

Tudo vira bit

O computador só armazena 0 e 1. A diferença entre um número, uma letra e um pixel não está nos bits em si, mas na forma como são interpretados.

A mesma sequência 0100 0001 pode ser o número 65, a letra 'A' (ASCII) ou parte de uma cor. O contexto (o tipo de dado) define o significado.

Inteiros sem sinal

Números não-negativos representados diretamente em binário. Com n bits, o intervalo é de 0 a 2n−1.

BitsIntervaloUso comum
8 bits0 a 2551 byte, cor RGB
16 bits0 a 65.535portas de rede
32 bits0 a ~4,2 bilhõesendereços IPv4

Overflow: se o resultado ultrapassa o máximo, ele "dá a volta". Em 8 bits, 255 + 1 = 0.

Inteiros com sinal: o problema

Como representar números negativos só com 0s e 1s? Três abordagens históricas:

MétodoIdeiaProblema
Sinal-magnitude1º bit é o sinal (0=+, 1=−)Existe +0 e −0; aritmética complicada
Complemento de 1Inverte todos os bits para negarAinda tem +0 e −0
Complemento de 2Inverte os bits e soma 1Nenhum — é o padrão usado hoje

Complemento de 2 (o padrão)

Negar +5 em 8 bits:

+5  = 0000 0101
inverte = 1111 1010
soma 1 = 1111 1011

−5  = 1111 1011

Por que é tão usado? Porque a soma funciona naturalmente, sem circuito especial para subtração: 5 + (−5) dá zero automaticamente (com o vai-um descartado).

Em n bits, o intervalo é de −2n−1 a +2n−1−1. Em 8 bits: −128 a +127.

Números reais: Ponto Flutuante

Para representar frações e números muito grandes/pequenos, usa-se notação científica em binário — o padrão IEEE 754.

valor = (−1)sinal × mantissa × 2expoente
PrecisãoSinalExpoenteMantissaTotal
Simples (float)1 bit8 bits23 bits32 bits
Dupla (double)1 bit11 bits52 bits64 bits

Ponto flutuante é uma aproximação. Por isso 0,1 + 0,2 não dá exatamente 0,3 em muitas linguagens: nem todo decimal tem representação binária finita.

Texto: a tabela ASCII

ASCII associa cada caractere a um número de 7 bits (0–127). Letras, dígitos, pontuação e comandos de controle.

CaractereDecimalBinário
'A'650100 0001
'a'970110 0001
'0'480011 0000
espaço320010 0000

Note que 'A' (65) e 'a' (97) diferem em exatamente um bit. E o caractere '0' não é o número zero — é o código 48.

Unicode e UTF-8

ASCII só cobre o inglês. O Unicode dá um número único a cada caractere de todas as línguas — e também a emojis.

UTF-8

Codificação de tamanho variável (1 a 4 bytes). Compatível com ASCII e dominante na web. 'A' usa 1 byte; 'ç' usa 2; '😀' usa 4.

Por que importa

Escolher a codificação errada causa os famosos caracteres trocados (ç, ã) ao abrir um arquivo. Por isso o HTML declara charset=UTF-8.

Imagens: pixels e cores

Uma imagem bitmap é uma grade de pixels. Cada pixel guarda uma cor, geralmente no modelo RGB: três bytes (vermelho, verde, azul), cada um de 0 a 255.

Vermelho puro: R=255 G=0   B=0   → #FF0000
Branco:        R=255 G=255 B=255 → #FFFFFF
Roxo:          R=128 G=0   B=128 → #800080

3 bytes por pixel = 24 bits = ~16,7 milhões de cores ("true color"). Uma imagem Full HD não comprimida ocupa ~6 MB — por isso usam-se formatos compactados como JPEG e PNG.

Som e vídeo

Detalhe importante: Endianness

Quando um número ocupa vários bytes, em que ordem eles são guardados na memória?

OrdemComo guarda 0x12345678Usado por
Big-endian12 34 56 78 (byte mais significativo primeiro)Redes, protocolos
Little-endian78 56 34 12 (byte menos significativo primeiro)x86, ARM

Importa ao trocar dados entre sistemas diferentes — um arquivo binário pode ser lido errado se a ordem dos bytes não for considerada.

Aprofundamento: por que o complemento de 2 funciona

O complemento de 2 não é um truque: é notação posicional com peso negativo no bit mais significativo. Em n bits, o bit da esquerda vale −2n−1; os demais, positivos:

1111 1011 (8 bits) =
−128 + 64 + 32 + 16 + 8 + 0 + 2 + 1
= −128 + 123 = −5

Extensão de sinal

Ao copiar um número para mais bits, repete-se o bit de sinal à esquerda. Assim −5 em 8 bits (1111 1011) vira 1111 1111 1111 1011 em 16 bits, preservando o valor.

Detecção de overflow

Há overflow quando se somam dois números de mesmo sinal e o resultado tem sinal oposto. Ex.: em 8 bits, 100 + 50 = 150 > 127 → resultado dá negativo (erro).

Aprofundamento: anatomia do IEEE 754

Um float de 32 bits tem três campos. O expoente é guardado com viés (bias) de 127, e a mantissa tem um bit 1 implícito antes da vírgula (forma normalizada 1,xxxx):

Codificar −6,5:
6,5 = 110,1(2) = 1,101 × 22

sinal   = 1    (negativo)
expoente = 2 + 127 = 129 = 1000 0001
mantissa = 101 0000... (23 bits, sem o 1 implícito)

1 10000001 10100000000000000000000

O viés permite comparar floats como se fossem inteiros e representar expoentes negativos sem um bit de sinal separado. O double (64 bits) usa o mesmo esquema com expoente de 11 bits e bias 1023.

Aprofundamento: infinitos, NaN e precisão

O IEEE 754 reserva padrões de expoente para representar casos especiais — por isso o computador "sabe" lidar com 1/0 sem travar:

ValorComo é codificado
±0Expoente e mantissa todos zero (há +0 e −0)
±∞Expoente todo 1, mantissa zero (ex.: 1,0 / 0,0)
NaN (Not a Number)Expoente todo 1, mantissa ≠ 0 (ex.: 0/0, √−1)
SubnormaisExpoente zero; preenchem a lacuna perto do zero (sem bit implícito)

O épsilon de máquina é o menor incremento relativo representável: ~1,2×10−7 no float e ~2,2×10−16 no double. Ele explica por que comparar reais com "==" é arriscado: use uma tolerância (|a − b| < ε).

Aprofundamento: detecção e correção de erros

Bits podem ser corrompidos no armazenamento ou na transmissão. Adicionam-se bits redundantes para perceber (e às vezes consertar) o erro:

TécnicaO que faz
Bit de paridade1 bit extra que torna par (ou ímpar) o nº de 1s. Detecta 1 erro; não corrige.
Código de HammingVários bits de paridade posicionados; corrige 1 erro e detecta 2 (distância 3).
ChecksumSoma dos dados anexada; detecta erros comuns (TCP/IP).
CRCResto de uma divisão polinomial; robusto contra rajadas de erro (Ethernet, ZIP).

Conceito central: a distância de Hamming (nº de bits diferentes entre dois códigos válidos). Um código com distância mínima d detecta até d−1 erros e corrige até ⌊(d−1)/2⌋.

Aprofundamento: a ciência da compressão

Comprimir é remover redundância. O limite teórico do quanto se pode comprimir sem perdas é dado pela entropia de Shannon — a quantidade média real de informação.

Sem perdas (lossless)

Reconstrói o original bit a bit. Usa códigos de tamanho variável para símbolos frequentes (Huffman), repetições (RLE) e dicionários (LZ77/LZW). Ex.: ZIP, PNG, FLAC.

Com perdas (lossy)

Descarta detalhes pouco perceptíveis aos sentidos para comprimir muito mais. Ex.: JPEG (visão), MP3/AAC (audição), H.264/H.265 (vídeo).

Por isso texto e código comprimem bem sem perdas (alta redundância), enquanto foto e som usam perdas: sacrificam fidelidade imperceptível por arquivos muito menores.

Glossário do tópico

Complemento de 2Forma padrão de representar inteiros negativos.
IEEE 754Padrão de representação de números reais (ponto flutuante).
ASCIITabela de 7 bits que codifica caracteres.
Unicode / UTF-8Codificação universal de caracteres de todas as línguas.
RGBModelo de cor com canais vermelho, verde e azul.
EndiannessOrdem de armazenamento dos bytes de um valor.
Bias do expoenteDeslocamento (127/1023) que codifica expoentes no IEEE 754.
NaN / ∞Padrões especiais do IEEE 754 (0/0, 1/0).
Épsilon de máquinaMenor incremento relativo representável; limita a precisão.
Paridade / Hamming / CRCTécnicas de detecção e correção de erros.

Exercícios resolvidos

1. Represente −18 em complemento de 2 com 8 bits.

Ver solução
+18 = 0001 0010. Inverte os bits → 1110 1101. Soma 1 → 1110 1110. Conferindo: −128 + 64 + 32 + 8 + 4 + 2 = −18. ✓

2. Qual o valor decimal de 1111 0000 em complemento de 2?

Ver solução
O bit mais à esquerda tem peso negativo: −128 + 64 + 32 + 16 = −16.

3. Codifique +5,0 em IEEE 754 de precisão simples (32 bits).

Ver solução
5 = 101(2) = 1,01 × 22. Sinal = 0; expoente = 2 + 127 = 129 = 1000 0001; mantissa = 010000... (23 bits). Resultado: 0 10000001 01000000000000000000000.

4. Em 8 bits sem sinal, quanto dá 200 + 100?

Ver solução
O máximo em 8 bits é 255. 200 + 100 = 300, que ultrapassa o limite: ocorre overflow. O valor "dá a volta": 300 − 256 = 44.

Resumindo

Tudo é bit; o tipo de dado define a interpretação. Inteiros usam complemento de 2, reais usam IEEE 754, texto usa ASCII/Unicode e mídia usa amostragem e pixels (com compressão). Entender isso explica overflows, erros de acentuação e o tamanho dos arquivos.

Voltar aos Tópicos