|
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].
|
Copyright © 1999, 2004, 2005 Andreas Borchert, in HTML konvertiert am 14.09.2005 |