Sobes.tech
Middle

Pourquoi Integer.MAX_VALUE plus un est-il égal à Integer.MIN_VALUE ?

sobes.tech IA

Réponse de l'IA

Integer.MAX_VALUE — c'est la valeur maximale pour un type entier signé de 32 bits en Java. Elle est égale à 2<sup>31</sup> - 1.

Représentation en mémoire:

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

Lorsqu'on ajoute un, il y a un dépassement de capacité :

Integer.MAX_VALUE + 1 :

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

Le bit le plus significatif devient 1, ce qui indique un nombre négatif en représentation signée. Pour la complément de deux (la représentation standard des nombres négatifs en Java), 1000...0000 correspond au plus petit nombre négatif pouvant être représenté avec 32 bits, c'est-à-dire Integer.MIN_VALUE (-2<sup>31</sup>).

Ce comportement est standard pour les types entiers signés en Java et dans beaucoup d'autres langages utilisant la complément de deux.