哈希33返回值的问题

哈希33返回值
问题相关代码
unsigned int hash(char *str)
{
    unsigned int h=0;
    while(*str)
    {
        h+=(h<<5)+ *str++;
    }
    return h&0x7fffffff;//可以得到31位的正整数。
}
这样和直接用int作为返回值有什么区别?

和直接用int作为返回值有什么区别

h&0x7fffffff
相当于取int型的绝对值

0x7fffffff 表示 int的最大值
0x表示是16进制
7 表示二进制 0111
F 表示二进制 1111
0x7FFFFFFF 就表示 是一个十六进制的int的最大值
也可以表示为二进制的 0111 1111 1111 1111 1111 1111 1111 1111
这是最大的整型数 int(因为第一位是符号位,0 表示他是正数)

每个十六进制数占4个bit(毕竟16进制最大值是15嘛),一个字节占8位。因此0x7ffffff应该理解为:
0x7f ff ff ff ff,也就是占4个字节,也就是一个int类型。

用 INT_MAX 常量可以替代这个值。

0x7f ff ff ff ff,也就是占4个字节,也就是一个int类型。(16进制)