Sobes.tech
Middle

Proč je Integer.MAX_VALUE plus jedna rovno Integer.MIN_VALUE?

sobes.tech AI

Odpověď od AI

Integer.MAX_VALUE — je maximální hodnota pro 32bitový znaménkový celé číslo v Javě. Je rovno 2<sup>31</sup> - 1.

Reprezentace v paměti:

Integer.MAX_VALUE: 0111...1111 (31 jedniček)

Při přičtení jedničky dojde k přetečení:

Integer.MAX_VALUE + 1:

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

Nejvyšší bit se stává jedničkou, což v znaménkové reprezentaci označuje záporné číslo. Pro doplněk k dvěma (standardní reprezentace záporných čísel v Javě) odpovídá 1000...0000 nejmenšímu zápornému číslu, které lze reprezentovat 32 bity, tedy Integer.MIN_VALUE (-2<sup>31</sup>).

Toto chování je standardní pro znaménkové celočíselné typy v Javě a v mnoha dalších jazycích používajících doplněk k dvěma.