Γιατί το 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 και σε πολλές άλλες γλώσσες που χρησιμοποιούν το συμπλήρωμα δύο.