Middle
Miért egyenlő az Integer.MAX_VALUE plusz egy az Integer.MIN_VALUE-vel?
sobes.tech MI
Válasz az MI-től
Integer.MAX_VALUE — ez a maximális érték egy 32 bites előjeles egész típushoz Java-ban. Ez egyenlő 2<sup>31</sup> - 1-gyel.
Memóriában való ábrázolás:
Integer.MAX_VALUE: 0111...1111 (31 egyes)
Amikor egyet adunk hozzá, túlcsordulás történik:
Integer.MAX_VALUE + 1:
0111...1111
+ 0000...0001
------------
1000...0000
A legmagasabb helyi bit 1 lesz, ami a jelzett ábrázolásban negatív számot jelez. A kétkomplementes (a Java-ban a negatív számok standard ábrázolása) esetén a 1000...0000 a legkisebb negatív számnak felel meg, amit 32 biten lehet ábrázolni, azaz a Integer.MIN_VALUE (-2<sup>31</sup>).
Ez a viselkedés standard a Java és sok más nyelv előjeles egész típusainál, amelyek a kétkomplementest használják.