Tipos de Dados, Variáveis e Operadores

C é uma linguagem tipada de forma estática e explícita. Isso significa que todo dado manipulado no programa precisa ter seu tipo definido, e esse tipo determina como ele será representado na memória, qual seu tamanho, alinhamento e o conjunto de operações válidas.

Tipos de dados primitivos

Os principais tipos em C são divididos em categorias:

Tipo
Tamanho típico (32-bit)
Descrição

char

1 byte

Caracteres ou pequenos inteiros

int

4 bytes

Inteiros padrão

short

2 bytes

Inteiros menores

long

4 ou 8 bytes

Inteiros maiores

float

4 bytes

Números de ponto flutuante (simples)

double

8 bytes

Ponto flutuante com mais precisão

O tamanho dos tipos depende da arquitetura e do compilador. No Linux, use sizeof() ou echo | gcc -dM -E - < /dev/null para ver definições.

Sinalização

Tipos inteiros podem ser:

  • signed (default): permitem valores negativos e positivos

  • unsigned: apenas valores positivos (e zero), com o dobro de alcance positivo

unsigned int u = 4294967295; // Máximo de 32 bits sem sinal 
int s = -2147483648;         // Mínimo de 32 bits com sinal

Saber isso é fundamental para interpretar corretamente valores em buffers, estruturas e regiões de memória, especialmente em engenharia reversa.

Variáveis: alocação e escopo

Declarações como:

instruem o compilador a reservar espaço na stack (em tempo de execução) ou em seções específicas do binário (caso sejam globais ou estáticas).

  • Locais: vão para a stack e são desalocadas ao sair do escopo.

  • Globais/estáticas: vão para as seções .data (inicializadas) ou .bss (não inicializadas).

  • Constantes literais: vão geralmente para .rodata.

Operadores

C fornece um conjunto completo de operadores para manipular dados diretamente:

Aritméticos

Relacionais

Lógicos

Bit a bit

Esses últimos são especialmente importantes em contextos de:

  • Manipulação de registradores,

  • Controle de flags,

  • Interpretação de protocolos binários,

  • Criptografia e codificações de baixo nível.

Exemplo de uso real:

Conversão de tipos (type casting)

Em C, é possível forçar a conversão de tipos manualmente:

Mas cuidado: conversões implícitas (promotions) também ocorrem em expressões mistas, podendo causar comportamento indefinido, overflow ou truncamento, algo crítico ao manipular dados recebidos da rede, arquivos ou memória.

Last updated