int x = 10; int y = (x.hashcode() & 0xfffffff);
Wie oben Code machen macht y immer positive ist? Vielen Dank!Wie man einen Hash-Code (Integer-Wert) positiv
int x = 10; int y = (x.hashcode() & 0xfffffff);
Wie oben Code machen macht y immer positive ist? Vielen Dank!Wie man einen Hash-Code (Integer-Wert) positiv
x.hashcode() & 0xfffffff
wird das Vorzeichenbit ausschalten. Math.abs
wird hier nicht verwendet, weil es negativ zurückgibt, wenn x.hashCode
gleich Integer.MIN_VALUE
ist, die das hashtable's
Array eine ArrayOutOfBoundException
werfen wird, die nicht lustig ist.
Von @JonSkeet Kommentar: Es schaltet nicht nur das Vorzeichen Bit aus, es löscht auch die nächsten drei Bits.
Aber mit Hash-Codes beschäftigen wir uns ständig mit Kollisionen, daher wird es als gut angesehen.
Es * nicht * nur * das Zeichen Bit abstellen, wohlgemerkt - es löscht auch die nächsten drei Bits ... –
@JonSkeet sehr wahr. –
Sleiman, könnten Sie etwas mehr über die innere Funktionsweise dieses 'x.hashcode() & 0xfffffff' Statements erklären? Was passiert genau unter der Haube? – Sahand
Wenn es ein Hash-Code sein soll, warum möchten Sie sicherstellen, dass es positiv ist? Warum es das schon tut - Sie behalten die unteren 32 Bits; Die oberen 4 Bits werden immer gelöscht. Ein beliebiges "int" mit dem obersten Bit clear ist nicht negativ. Sie könnten dies erreichen, ohne so viele Informationen zu verlieren, indem Sie 'x.hashCode() & 0x7fffffff' (aka' x.hashCode() & Integer.MAX_VALUE') verwenden. –
@JonSkeet Ich denke, er fragt, warum die bitweise Operation Ihnen einen bringt positiver Wert. –
@SleimanJneidi: Nun, das ist, was der Körper der Frage sagt (und ich erkläre es im Kommentar), aber der * Titel * der Frage fragt, wie man einen positiven Wert bekommt. –