Aula 02 - Representação de Dados
Ao cruzar a fronteira entre software e a CPU, descobrimos que não existem “Strings” ou “Imagens”, existem apenas correntes elétricas ligadas ou desligadas (1s e 0s). Vamos analisar a estrutura sob a ótica de C/C++.
🔢 1. Sistema Binário e Hexadecimal
O computador compreende nativamente a base 2 (Binário). Como a escrita binária é muito longa para os humanos, nós a agrupamos em Blocos de 4 (Base 16 - Hexadecimal).
- Bit: 0 ou 1
- Byte: 8 bits (
00000000a11111111, indo de 0 a 255 no decimal)
Por que Hexadecimal é amado pelos desenvolvedores C/C++? Um Byte (8 bits) pode ser perfeitamente representado por exatos dois caracteres Hexadecimais. FF é o mesmo que 11111111.
$ # Como você lida com Hex no C++?
$ cat var.cpp
int mascara_de_bits = 0xFF; // Representa 255🔋 2. Inteiros com e sem Sinal (Unsigned)
Em C/C++, o rigor nos tipos provém diretamente do hardware:
int x = 255; // Geralmente um int é 32 bits, comportando valores grandes, podendo ser negativo (signed).
unsigned char y = 255; // 8 bits sem sinal (0 a 255)
signed char z = -1; // 8 bits com sinal (-128 a 127)No hardware, inteiros negativos são representados usando a regra de Complemento de 2. Para obtermos o binário do -1, invertemos todos os bits de 1 e somamos 1.
WARNING
Sempre avalie Overshoot. Um loop usando
unsigned int i = 10; while(i >= 0)será um loop infinito, porque quandoiatingir 0 e for subtraído, ele NUNCA ficará negativo; ele executará o “Wrap-around” arquitetural, voltando ao valor limite de (4.294.967.295).
🧮 3. Ponto Flutuante (IEEE 754)
Os famosos tipos float e double. O processador possui normalmente um setor dedicado de FPU (Floating Point Unit) para eles.
A representação oficial IEEE 754 os divide em 3 porções:
flowchart LR A["Sinal (1 bit)"] --- B["Expoente (8 bits)"] --- C["Fração/Mantissa (23 bits)"] style A fill:#ff9999 style B fill:#99ccff style C fill:#ccffcc
O Perigo da Precisão!
CAUTION
Ao somar decimais repetidamente, as variações de mantissa geram margens de erro:
0.1 + 0.2raramente é exatamente0.3na FPU, mas sim0.30000000000000004! Evite comparadores igualitários (==) em floats. Jamais use floats transacionando valores bancários estritos em backend, use estruturas customizadas dimensionais inteiras.
🚀 Resumo Prático
A maneira como você escolhe o tipo primitivo da variável modela a fisionomia do registrador acionado na máquina durante o fetch. Entender o Overflow é a proteção básica contra corrupção lógica do código.
🎯 Próximos Passos
- Acessar Slides
---
Reveja a apresentação visual desta aula.
[➔ Ver Slides da Aula](../slides/slide-02.html)
- Quiz
---
Teste seu entendimento básico com perguntas rápidas.
[➔ Responder Quiz](../quizzes/quiz-02.md)
- Exercícios
---
Prática avançada e dissertativa com consulta.
[➔ Lista de Exercícios](../exercicios/exercicio-02.md)
- Projeto
---
Laboratório prático de codificação em C/C++.
[➔ Mini Projeto](../projetos/projeto-02.md)