int x = 10; int y = (x.hashcode() & 0xfffffff);
Come sopra codice fa y è sempre positivo? Grazie!Come fare un hashcode (valore intero) positivo
int x = 10; int y = (x.hashcode() & 0xfffffff);
Come sopra codice fa y è sempre positivo? Grazie!Come fare un hashcode (valore intero) positivo
x.hashcode() & 0xfffffff
disattiva il segnale. Math.abs
non viene utilizzato qui perché restituisce un valore negativo se x.hashCode
è uguale a Integer.MIN_VALUE
che renderà l'array hashtable's
un ArrayOutOfBoundException
che non è divertente.
Da @JonSkeet commento: Non si limita a disattivare il bit di segno, cancella anche i successivi tre bit.
Ma con i codici hash ci occupiamo sempre di collisioni, quindi è considerato buono.
Non * solo * disattiva il bit di segno, attenzione - cancella anche i successivi tre bit ... –
@JonSkeet molto vero. –
Sleiman, potresti spiegare un po 'di più sul funzionamento interno dell'istruzione 'x.hashcode() & 0xfffffff'? Cosa sta succedendo esattamente sotto il cofano? – Sahand
Se è pensato per essere un codice hash, perché vuoi assicurarti che sia positivo? Per quanto riguarda il motivo per cui lo sta già facendo - stai mantenendo i 32 bit in basso; i primi 4 bit saranno sempre cancellati. Qualunque 'int' con il bit più chiaro è non negativo. È possibile ottenere ciò senza perdere molte informazioni usando 'x.hashCode() & 0x7fffffff' (noto anche come' x.hashCode() e Integer.MAX_VALUE') –
@JonSkeet Penso che stia chiedendo perché l'operazione bitwise ti farà ottenere valore positivo. –
@SleimanJneidi: Beh, questo è quello che dice il corpo della domanda (e lo spiego nel commento) ma il * titolo * della domanda chiede come ottenere un valore positivo. –