Auf Multiplikation basierende Hash-Funktionen II

 [Vorheriges Kapitel]  [Vorherige Seite]  [Inhaltsverzeichnis]  [Nächste Seite]  [Nächstes Kapitel]

CONST bitsperword = 32; (* size of INTEGER in bits *)
TYPE HashValue = INTEGER;
   (* [0..n-1], n = 2^t, t < bitsperword *)

PROCEDURE Hash(k: INTEGER) : HashValue;
BEGIN
   RETURN SHORT(SYSTEM.LSH(a * k, t - bitsperword))
END Hash;

*In Oberon liefert die Multiplikation von zwei 32-Bit-Zahlen nur die niedrigwertigen 32 Bits.
 
*Die Operation LSH (logical shift) aus dem Modul SYSTEM verschiebt die Bits des 1. Parameters um die im 2. Parameter angegebene Anzahl. Da t - bitsperword negativ ist, wird nach rechts geschoben.
 
*Die links nachkommenden Bits werden dabei alle auf 0 gesetzt.
 
*Entsprechend ergeben sich anschließend die t niedrigwertigen Bits aus der Multiplikation, und die verbleibenden Bits sind 0.
 
*Das Resultat liegt somit im Intervall [0, 2t-1].
 

 [Vorheriges Kapitel]  [Vorherige Seite]  [Inhaltsverzeichnis]  [Nächste Seite]  [Nächstes Kapitel]
Copyright © 1999, 2004, 2005 Andreas Borchert, in HTML konvertiert am 14.09.2005