Sobes.tech
Middle

Защо Integer.MAX_VALUE плюс един е равно на Integer.MIN_VALUE?

sobes.tech AI

Отговор от AI

Integer.MAX_VALUE — това е максималната стойност за 32-битов знаков цял тип данни в Java. То е равно на 2<sup>31</sup> - 1.

Представяне в паметта:

Integer.MAX_VALUE: 0111...1111 (31 единици)

При добавяне на единица се случва препълване:

Integer.MAX_VALUE + 1:

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

Най-старият бит става единица, което в знаковото представяне показва отрицателно число. За двоичен допълнение (стандартното представяне на отрицателните числа в Java) 1000...0000 съответства на най-малкото отрицателно число, което може да бъде представено с 32 бита, т.е. Integer.MIN_VALUE (-2<sup>31</sup>).

Това поведение е стандартно за знаковите цели числа в Java и много други езици, използващи двоичен допълнение.