Sobes.tech
Middle

Dlaczego Integer.MAX_VALUE plus jeden jest równe Integer.MIN_VALUE?

sobes.tech AI

Odpowiedź od AI

Integer.MAX_VALUE — to maksymalna wartość dla 32-bitowego typu danych całkowitych ze znakiem w Java. Jest równe 2<sup>31</sup> - 1.

Reprezentacja w pamięci:

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

Przy dodaniu jeden następuje przepełnienie:

Integer.MAX_VALUE + 1:

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

Najbardziej znaczący bit staje się jedynką, co w reprezentacji ze znakiem wskazuje na liczbę ujemną. Dla dopełnienia do dwóch (standardowa reprezentacja liczb ujemnych w Java), 1000...0000 odpowiada najmniejszej liczbie ujemnej, którą można przedstawić za pomocą 32 bitów, czyli Integer.MIN_VALUE (-2<sup>31</sup>).

To zachowanie jest standardowe dla typów całkowitych ze znakiem w Java i wielu innych językach używających dopełnienia do dwóch.