Sobes.tech
Middle

Kāpēc Integer.MAX_VALUE plus viens ir vienāds ar Integer.MIN_VALUE?

sobes.tech AI

Atbilde no AI

Integer.MAX_VALUE — tas maksimālais 32 bitu zīmēts vesela skaitļa vērtība Java. Tā ir vienāda ar 2<sup>31</sup> - 1.

Atveidojums atmiņā:

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

Pievienojot vienu, notiek pārsniegums:

Integer.MAX_VALUE + 1:

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

Visaugstākais bits kļūst par 1, kas zīmēto skaitļu attēlojumā norāda uz negatīvu skaitli. Divu papildinājumu (standarta negatīvu skaitļu attēlojums Java) gadījumā, 1000...0000 atbilst mazākajam negatīvajam skaitlim, ko var attēlot ar 32 bitiem, tas ir Integer.MIN_VALUE (-2<sup>31</sup>).

Šāda uzvedība ir standarta Java zīmētiem veseliem skaitļiem un daudzās citās valodās, kas izmanto divu papildinājumu.