无法摆脱“此十进制常量仅在ISO C90中无符号”警告

时间:2010-02-27 15:53:49

标签: c warnings constants unsigned c89

我在我的Hash Table实现中使用FNV哈希作为哈希算法,但我在这一行的问题标题中收到警告:

unsigned hash = 2166136261;

我不明白为什么会这样,因为当我这样做时:

printf("%u\n", UINT_MAX);
printf("2166136261\n");

我明白了:

4294967295
2166136261

这似乎在我的机器的限制之下......

为什么我会收到警告以及我可以选择摆脱它?

1 个答案:

答案 0 :(得分:42)

unsigned hash = 2166136261u; // note the u.

您需要后缀u来表示这是一个无符号数字。如果没有u后缀,则它将是带符号的数字。由于

2166136261 > 2³¹ - 1 = INT_MAX,

这个整数文字会有问题。