# hashCode() Berechnung



## xquadrat (1. Apr 2009)

Hi,
habe mal eine allgemeine Frage. In der Java API wie in Joshua Blochs Buch "Effective Java" wird der hash code für einen long Wert wie folgt berechnet (int) (f^(f>>>32))
Meine frage ist jetzt, was bedeutet der Ausdruck f>>>32 und was berechnet er?

Vielen Dank.


----------



## Illuvatar (1. Apr 2009)

Das schiebt alle Bits von f um 32 Stellen nach rechts (und füllt von links mit Nullen auf)


----------



## xquadrat (1. Apr 2009)

Ok, vielen Dank


----------



## Ebenius (1. Apr 2009)

Nachtrag (auch wenn das für die hashCode-Methode gar nicht so interessant ist):

>>> verschiebt wirklich *alle* Bits inkl. Vorzeichenbit. Das Ergebnis ist immer positiv.
>> verschiebt ohne Vorzeichenbit, das Vorzeichen bleibt also wie es vorher war.

Ebenius


----------



## SchonWiederFred (2. Apr 2009)

Ebenius hat gesagt.:


> >> verschiebt ohne Vorzeichenbit, das Vorzeichen bleibt also wie es vorher war.


Was glaubst Du, was 0x80000000 >> 1 ergibt?


----------



## Ebenius (2. Apr 2009)

SchonWiederFred hat gesagt.:


> Was glaubst Du, was 0x80000000 >> 1 ergibt?


Einhalb Integer.MIN_VALUE. Wieso?

Die *Zahl* 0x80000000 ist dezimal *2147483648*, was sich nicht auf _int_ abbilden lässt. Das *Liteal* 0x80000000 wird aber als *Zahl* -2147483648 (== Integer.MIN_VALUE) interpretiert.

Ebenius


----------

