Υπάρχει τρόπος να δηλώσετε ένα unsigned int στη Java;
Ή η ερώτηση μπορεί να διατυπωθεί και ως εξής: Ποιο είναι το ισοδύναμο της Java για το unsigned;
Για να σας πω το πλαίσιο, έβλεπα την υλοποίηση της String.hashcode()
της Java. Ήθελα να ελέγξω την πιθανότητα σύγκρουσης αν ο ακέραιος ήταν 32 unsigned int.
Η Java δεν διαθέτει τύπο δεδομένων για ακέραιους χωρίς πρόσημο.
Μπορείτε να ορίσετε έναν long
αντί για έναν int
αν χρειάζεται να αποθηκεύσετε μεγάλες τιμές.
Μπορείτε επίσης να χρησιμοποιήσετε έναν προσημασμένο ακέραιο σαν να ήταν χωρίς πρόσημο. Το πλεονέκτημα της αναπαράστασης two's complement είναι ότι οι περισσότερες πράξεις (όπως η πρόσθεση, η αφαίρεση, ο πολλαπλασιασμός και η αριστερή μετατόπιση) είναι πανομοιότυπες σε δυαδικό επίπεδο για προσημασμένους και μη προσημασμένους ακεραίους. Ωστόσο, μερικές πράξεις (διαίρεση, δεξιά μετατόπιση, σύγκριση και χύτευση) είναι διαφορετικές. Από τη Java SE 8, νέες μέθοδοι στην κλάση Integer
σας επιτρέπουν να χρησιμοποιείτε πλήρως τον τύπο δεδομένων int
για την εκτέλεση αριθμητικών πράξεων χωρίς πρόσημο:
Στη Java SE 8 και μεταγενέστερες εκδόσεις, μπορείτε να χρησιμοποιήσετε τον τύπο δεδομένων int για να αναπαραστήσετε έναν ακέραιο αριθμό 32-bit χωρίς πρόσημο, ο οποίος έχει ελάχιστη τιμή 0 και μέγιστη τιμή 2^32-1. Χρησιμοποιήστε την κλάση Integer για να χρησιμοποιήσετε τον τύπο δεδομένων int ως ακέραιο χωρίς πρόσημο. Στατικές μέθοδοι όπως
compareUnsigned
,divideUnsigned
κ.λπ. έχουν προστεθεί στην κλάση Integer για την υποστήριξη των αριθμητικών πράξεων για ακέραιους χωρίς πρόσημο.
Σημειώστε ότι οι μεταβλητές int
εξακολουθούν να είναι προσημασμένες όταν δηλώνονται, αλλά η αριθμητική χωρίς πρόσημο είναι τώρα δυνατή με τη χρήση αυτών των μεθόδων στην κλάση Integer
.
Μπορείτε να χρησιμοποιήσετε τη συνάρτηση Math.abs(number). Επιστρέφει έναν θετικό αριθμό.