Sobes.tech
Middle

Zašto je Integer.MAX_VALUE plus jedan jednako Integer.MIN_VALUE?

sobes.tech АИ

Одговор од АИ

Integer.MAX_VALUE — ovo je maksimalna vrednost za 32-bitni potpisani celobrojni tip u Javi. Jednako je 2<sup>31</sup> - 1.

Predstavljanje u memoriji:

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

Kada se doda jedan, dolazi do prelivanja:

Integer.MAX_VALUE + 1:

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

Najveći bit postaje jedan, što u potpisanom predstavljanju ukazuje na negativan broj. Za dvokomponentno dopunjavanje (standardno predstavljanje negativnih brojeva u Javi), 1000...0000 odgovara najmanjem negativnom broju koji može biti predstavljen sa 32 bita, tj. Integer.MIN_VALUE (-2<sup>31</sup>).

Ovo ponašanje je standardno za potpisane celobrojne tipove u Javi i mnogim drugim jezicima koji koriste dvokomponentno dopunjavanje.