ExpertiDict

C++ · Avançado · Português · Técnico

overflow de inteiro com sinal

ˌoveʁˈflow dʒi ĩˈtejɾu kõ siˈnawsubstantivo

Estouro de um int ou outro inteiro com sinal além do máximo ou mínimo do tipo. Em C++ isso é comportamento indefinido, enquanto inteiros sem sinal simplesmente dão a volta.

Onde usar

Aparece em somas e multiplicações de entradas grandes, e o compilador pode assumir que nunca ocorre, removendo verificações como if (x + 1 < x). Ferramentas como o UBSan detectam o problema.

Em código

int m = INT_MAX;
// m + 1;      // UB: overflow com sinal
unsigned u = UINT_MAX;
u += 1;         // ok: vira 0
if (m < INT_MAX) ++m;  // checa antes
// g++ -fsanitize=undefined detecta

Exemplos

Esse laço pode virar infinito porque o overflow com sinal é indefinido.

Rode com -fsanitize=undefined para pegar overflow de inteiro.

Cuidado

Não presuma que vai dar a volta como no complemento de dois: o otimizador pode transformar o código de formas inesperadas.

Sinônimos

estouro de inteiro

Veja também

Todos os termos de C++