Sobes.tech
Middle

Γιατί το Integer.MAX_VALUE συν ένα είναι ίσο με το Integer.MIN_VALUE;

sobes.tech AI

Απάντηση από AI

Integer.MAX_VALUE — είναι η μέγιστη τιμή για έναν 32-bit υπογεγραμμένο ακέραιο τύπο δεδομένων στη Java. Είναι ίση με 2<sup>31</sup> - 1.

Αναπαράσταση στη μνήμη:

Integer.MAX_VALUE: 0111...1111 (31 μονάδες)

Όταν προστίθεται ένα, συμβαίνει υπερχείλιση:

Integer.MAX_VALUE + 1:

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

Το πιο σημαντικό bit γίνεται 1, το οποίο στην υπογραφή αναπαράσταση δείχνει αρνητικό αριθμό. Για την συμπληρωματική δύο (την τυπική αναπαράσταση αρνητικών αριθμών στη Java), το 1000...0000 αντιστοιχεί στον μικρότερο αρνητικό αριθμό που μπορεί να αναπαρασταθεί με 32 bits, δηλαδή το Integer.MIN_VALUE (-2<sup>31</sup>).

Αυτή η συμπεριφορά είναι τυπική για τους υπογεγραμμένους ακέραιους τύπους στη Java και σε πολλές άλλες γλώσσες που χρησιμοποιούν το συμπλήρωμα δύο.