Não consigo realmente encontrar uma fonte "autorizada" sobre esse assunto, principalmente porque isso é provavelmente uma questão de convenção, e a terminologia geralmente é muito inconsistente. Mas, o trecho a seguir de " Secure Coding in C and C ++ " de Robert Seacord resume minha compreensão da situação:
Um estouro de número inteiro ocorre quando um número inteiro é aumentado além do seu valor máximo ou diminuído além do seu valor mínimo 3 . Estouros de número inteiro estão intimamente relacionados à representação subjacente.
A nota de rodapé continua dizendo:
[3] Diminuir um número inteiro além do seu valor mínimo é geralmente chamado de fluxo insuficiente de números inteiros , embora tecnicamente esse termo se refira a uma condição de ponto flutuante.
O motivo pelo qual chamamos de excesso de número inteiro é porque simplesmente não há espaço suficiente disponível no tipo para representar o valor. Nesse sentido, é semelhante a um estouro de buffer (exceto que, em vez de realmente cruzar o limite do buffer, geralmente exibe um comportamento envolvente. *) Nessa perspectiva, não há diferença conceitual entre INT_MIN - 1e INT_MAX + 1. Nos dois casos, simplesmente não há espaço suficiente no inttipo de dados para representar os dois valores - portanto, o que temos é um estouro .
Também pode ser útil observar que nas arquiteturas dos processadores x86 e x86_64, o registro de sinalizadores inclui um bit de estouro . O bit de estouro é definido quando uma operação aritmética de número inteiro assinado transborda. A expressão INT_MIN - 1definirá o bit de estouro. (Não há um bit "underflow"). Tão claramente, os engenheiros da AMD e da Intel usam o termo "overflow" para descrever o resultado de uma operação aritmética inteira que possui muitos bits para caber no tipo de dados, independentemente de o o valor é numericamente muito grande ou muito pequeno.
* De fato, em C, o excesso de número inteiro assinado é na verdade um comportamento indefinido, mas em outras linguagens como Java, a aritmética de complemento dos dois será contornada.
INT_MIN - 1ou nãoINT_MAX + 1