Sobes.tech
Middle

Prečo je Integer.MAX_VALUE plus jeden rovné Integer.MIN_VALUE?

sobes.tech AI

Odpoveď od AI

Integer.MAX_VALUE — je maximálna hodnota pre 32-bitového znamienkového celého čísla v Jave. Je rovná 2<sup>31</sup> - 1.

Reprezentácia v pamäti:

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

Pri pridaní jednotky dôjde k pretečeniu:

Integer.MAX_VALUE + 1:

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

Najvyšší bit sa stáva jednotkou, čo v znamienkovej reprezentácii označuje záporné číslo. Pre doplnok k dvom (štandardná reprezentácia záporných čísel v Jave) 1000...0000 zodpovedá najmenšiemu zápornému číslu, ktoré možno reprezentovať s 32 bitmi, teda Integer.MIN_VALUE (-2<sup>31</sup>).

Toto správanie je štandardné pre znamienkové celé čísla v Jave a v mnohých ďalších jazykoch používajúcich doplnok k dvom.