我在我的Hash Table实现中使用FNV哈希作为哈希算法,但我在这一行的问题标题中收到警告:
unsigned hash = 2166136261;
我不明白为什么会这样,因为当我这样做时:
printf("%u\n", UINT_MAX);
printf("2166136261\n");
我明白了:
4294967295
2166136261
这似乎在我的机器的限制之下......
为什么我会收到警告以及我可以选择摆脱它?
答案 0 :(得分:42)
unsigned hash = 2166136261u; // note the u.
您需要后缀u
来表示这是一个无符号数字。如果没有u
后缀,则它将是带符号的数字。由于
2166136261 > 2³¹ - 1 = INT_MAX,
这个整数文字会有问题。