Representação de Dados & Sistema Numérico - Guia Básico de Estudos


Representação de Dados & Sistema Numérico - Guia Básico de Estudos

Representação de Dados & Sistema Numérico

Introdução

Para um computador executar qualquer tipo de tarefa - somar números, exibir texto, processar imagens - é essencial que tudo seja transformado em bits (0s e 1s). Mas como representar diferentes tipos de dados (inteiros, frações, texto, etc.) usando apenas essa combinação binária? Esse é o tema deste artigo.

Sistemas Numéricos Fundamentais

Antes de ver representações específicas, precisamos conhecer os sistemas de numeração usados para codificar valores.

Decimal (base 10)

É o sistema que usamos no dia a dia: dígitos de 0 a 9, cada posição tem peso de potências de 10.
Por exemplo:

237₁₀ = 2×10² + 3×10¹ + 7×10⁰ = 200 + 30 + 7

Mas em hardware digital, decimal não é eficiente internamente - usamos sistemas binários.

Binário (base 2)

É o sistema natural ao computador: apenas dois dígitos - 0 e 1.
Cada posição representa uma potência de 2:

Por exemplo: 10110₂ = 1×2⁴ + 0×2³ + 1×2² + 1×2¹ + 0×2⁰ = 16 + 0 + 4 + 2 + 0 = 22₁₀

Esse sistema permite codificar qualquer número inteiro, mas pode ficar longo quando há muitos bits.

Hexadecimal (base 16)

Para tornar a visualização (e depuração) mais compacta, usamos o hexadecimal (hex).
Ele tem 16 símbolos: 0-9 e A-F (onde A = 10, B = 11, etc.). Cada dígito hex representa exatamente 4 bits (um “nibble”)

Exemplos:
0x1A = 1×16 + 10 = 26 decimal
0xFF = 15×16 + 15 = 255 decimal

Também facilita converter para binário: cada dígito hex → 4 bits.

Octal (base 8) - menos usado hoje

Relacionado ao binário, usa dígitos de 0 a 7. Cada dígito octal equivale a 3 bits.
Antigamente era usado em algumas arquiteturas de 12, 24 bits.

Conversões entre sistemas

Para trabalhar bem com representações, é essencial saber converter entre decimal, binário e hexadecimal.

Decimal > Binário

Para a parte inteira:

Divida o número por 2 repetidamente, anotando os restos (0 ou 1).
Os restos lidos de baixo para cima formam o número binário.

Exemplo: converter 13₁₀ para binário:

13 ÷ 2 = 6 resto 1
6 ÷ 2 = 3 resto 0
3 ÷ 2 = 1 resto 1
1 ÷ 2 = 0 resto 1

Restos de baixo para cima > 1101₂.

Binário > Decimal

Multiplique cada bit pelo peso da posição (potência de 2) e some.

Por exemplo: 1011₂ = 1×2³ + 0×2² + 1×2¹ + 1×2⁰ = 8 + 0 + 2 + 1 = 11₁₀.

Binário ↔ Hexadecimal

Binário para hex: agrupe bits de 4 em 4 (da direita para a esquerda), e converta cada grupo para um dígito hex.
Hex para binário: substitua cada dígito hex pelo seu equivalente em 4 bits.

Exemplo: 1101 1011₂ > agrupar > 1101 = D, 1011 = B > DB₁₆.
Ou 0x3F > 3 = 0011, F = 1111 > 0011 1111₂.

Decimal ↔ Hexadecimal

Pode-se fazer decimal > binário > hex, ou usar divisão por 16 com restos.

Representação de Inteiros (Inteiros sem / com sinal)

Inteiros sem sinal (Unsigned)

Simples: usar todos os bits para representar valores positivos (incluindo zero). Com n bits, podemos representar de 0 até (2ⁿ - 1).

Exemplo com 4 bits: 0000 até 1111 > valores de 0 até 15.

Inteiros com sinal (Signed)

Para permitir números negativos, precisamos usar codificações especiais. Três formas clássicas:

Signo-Magnitude (Sign-Magnitude)

O bit mais significativo (MSB) indica sinal (0 = positivo, 1 = negativo).

Os demais bits representam o valor absoluto.

Ex: para 8 bits, +5 = 00000101, -5 = 10000101.

Problemas: há duas representações para zero (00000000 e 10000000), operações aritméticas complicadas.

Complemento de 1 (One’s Complement)



Para obter o negativo: invertem-se todos os bits (0 ↔ 1).

Ex: +5 = 00000101 > -5 = 11111010.

Também há ambiguidade (duas representações de zero). 

Complemento de 2 (Two’s Complement) - muito usado hoje

Negativo: invertendo todos os bits + 1.

Ex: +5 = 00000101 > inverte = 11111010 > +1 > 11111011 é –5.

Único zero, operações aritméticas mais simples.

A maioria dos computadores modernos usa complemento de 2 para representar inteiros negativos. 

Representação de Números Reais / Ponto Flutuante

Para representar frações e números muito grandes ou muito pequenos, usamos o formato ponto flutuante (floating point). O padrão mais comum é IEEE-754.

Estrutura básica (formato IEEE-754)

Para 32 bits (precisão simples / single precision):

1 bit de sinal (S) - indica positivo ou negativo

8 bits de expoente (E) - com viés (bias)

23 bits de mantissa / fração (F)

O valor é calculado como:

(-1)^S × 1.F × 2^(E - bias)

O bias para 8 bits é 127 > ou seja, o valor real do expoente é E - 127.

Para 64 bits (dupla precisão / double precision):

1 bit de sinal
11 bits de expoente
52 bits de fração

Nesse caso, o bias é 1023.

Normalização e representação

A forma “normalizada” assume que a mantissa tem um bit “1” implícito antes da vírgula (não armazenado explicitamente), para maximizar precisão.
Há formatos especiais para representar zeros, infinitos, “NaN” (not a number) e números subnormais.

Limitações & erros de precisão

Nem todo número decimal pode ser representado exatamente em binário (por exemplo, 0,1).
erro de arredondamento quando o número excede a precisão disponível.
Operações em ponto flutuante são mais custosas em hardware do que operações inteiras.

Exemplo prático (32 bits)

Suponha que temos o bit pattern:

 0 | 10000001 | 01100000000000000000000

S = 0 > número positivo
E = 10000001₂ = 129 decimal
Mantissa = 1.011000…₂ = 1 + 0.25 + 0.125 = 1.375
Expoente real = 129 – 127 = 2

Então o valor é +1.375 × 2² = +5.5

Você pode encontrar exemplos como esse no tutorial da Nanyang Tech University.

Representação de Caracteres / Texto

Além de números, queremos representar texto - letras, símbolos, etc. Para isso, adotamos codificações padronizadas.

ASCII

“American Standard Code for Information Interchange”

Usa 7 ou 8 bits por caractere

Ex: ‘A’ = 65 decimal = 01000001₂

Unicode / UTF-8

Unicode engloba muitos idiomas e símbolos do mundo inteiro.

UTF-8 é uma codificação variável (1 a 4 bytes por caractere) que mantém compatibilidade com ASCII para caracteres comuns. 

Conclusão

Neste terceiro artigo, você aprendeu:

Sistemas numéricos (binário, hexadecimal, decimal e octal)
Como converter entre eles
Representação de inteiros (sem sinal e com sinal, via complemento de 2)
Representação de números reais com ponto flutuante (IEEE-754)
Representação de caracteres / texto

Com essa base, você estará mais preparado para estudos seguintes: organização da CPU, representação de instruções, decodificação, etc.

Referências

EH Chua (Nanyang Technological University). A Tutorial on Data Representation – Integers, Floating-point, disponível online.

Doc.IC - Computer Architecture - Binary Numbers. “Hexadecimal is a convenient shorthand for Binary.”

GeeksforGeeks. “Base Conversions for Number System.”

CSApp / CMU - Representing and Manipulating Information.

Oregon State - Data Representation (slides).

CCBP Blog. “Data Representation in Computer Organization and its Types.”