Sobes.tech
Middle

Kodėl Integer.MAX_VALUE plius vienas yra lygus Integer.MIN_VALUE?

sobes.tech AI

Atsakymas iš AI

Integer.MAX_VALUE — tai didžiausia reikšmė 32 bitų ženklintam sveikajam skaičiui Java kalboje. Ji lygi 2<sup>31</sup> - 1.

Atvaizdavimas atmintyje:

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

Pridėjus vieną, įvyksta perteklius:

Integer.MAX_VALUE + 1:

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

Didžiausias bitas tampa 1, kas rodo neigiamą skaičių ženklintame atvaizdavime. Dvejų papildymo (standartinis neigiamų skaičių atvaizdavimas Java) atveju, 1000...0000 atitinka mažiausią neigiamą skaičių, kurį galima atvaizduoti 32 bitais, t.y., Integer.MIN_VALUE (-2<sup>31</sup>).

Šis elgesys yra standartinis ženklintų sveikųjų tipų Java ir daugelyje kitų kalbų, naudojančių dvejų papildymą, atveju.