ELFHash的理解

int ELFHash(char *str)
{
    unsigned int h = 0, g;

    while (*str) {

        h = (h << 4) + *str++; //将当前字符的高4位加到哈希值的最低4位,低4位放在左移后哈希传值的低4位

        if ((g = h & 0xF0000000) != 0) {
            /*最前面的4位非零表示多于7个字符*/
            h ^= (g >> 24);  //这句只会修改h的第5-8位,因为h是无符号的,左移操作是逻辑移位,如果h定义为有符号的,就是算术移位
            h &= ~g;//将h的高4位清零
        }
    }

    return h &0x7fffffff;
}

你可能感兴趣的:(ELFHash的理解)