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:
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()ouecho | gcc -dM -E - < /dev/nullpara ver definições.
Sinalização
Tipos inteiros podem ser:
signed(default): permitem valores negativos e positivosunsigned: 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 sinalSaber 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