Sobes.tech
Middle

Por que o Integer.MAX_VALUE mais um é igual ao Integer.MIN_VALUE?

sobes.tech IA

Resposta da IA

Integer.MAX_VALUE — é o valor máximo para um tipo de dado inteiro com sinal de 32 bits em Java. É igual a 2<sup>31</sup> - 1.

Representação na memória:

Integer.MAX_VALUE: 0111...1111 (31 uns)

Ao adicionar um, ocorre um estouro:

Integer.MAX_VALUE + 1:

  0111...1111
+ 0000...0001
------------
  1000...0000

O bit mais significativo torna-se um, o que, na representação com sinal, indica um número negativo. Para o complemento de dois (a representação padrão de números negativos em Java), 1000...0000 corresponde ao menor número negativo que pode ser representado com 32 bits, que é Integer.MIN_VALUE (-2<sup>31</sup>).

Este comportamento é padrão para tipos inteiros com sinal em Java e em muitas outras linguagens que utilizam o complemento de dois.