アットウィキロゴ

hash関数

    static int getHash(int key, int seed) {
        int c1 = 0xcc9e2d51;
        int c2 = 0x1b873593;
        int r1 = 15;
        int r2 = 13;
        int m = 5;
        int n = 0xe6546b64;
        
        int hash = seed;

        int k = key;
        k *= c1;
        k = (k << r1) | (k>>>(32-r1));
        k *= c2;
        hash ^= k;
        hash = ((hash << r2) | (hash >>> (32 - r2))) * m + n;        
    
        hash ^= 4;
        hash ^= (hash >>> 16);
        hash *= 0x85ebca6b;
        hash ^= (hash >>> 13);
        hash *= 0xc2b2ae35;
        hash ^= (hash >>> 16);
        
        return hash;
    }
最終更新:2014年07月27日 19:23