Sobes.tech
Middle

Perché Integer.MAX_VALUE più uno è uguale a Integer.MIN_VALUE?

sobes.tech AI

Risposta dell'AI

Integer.MAX_VALUE — è il valore massimo per un tipo di dato intero con segno a 32 bit in Java. È uguale a 2<sup>31</sup> - 1.

Rappresentazione in memoria:

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

Aggiungendo uno, si verifica un overflow:

Integer.MAX_VALUE + 1:

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

Il bit più significativo diventa uno, il che indica un numero negativo in rappresentazione con segno. Per la rappresentazione in complemento a due (la rappresentazione standard dei numeri negativi in Java), 1000...0000 corrisponde al più piccolo numero negativo rappresentabile con 32 bit, ovvero Integer.MIN_VALUE (-2<sup>31</sup>).

Questo comportamento è standard per i tipi interi con segno in Java e in molti altri linguaggi che utilizzano il complemento a due.