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.