29

ハッシュテーブルの実装でハッシュアルゴリズムとしてFNVハッシュを使用していますが、次の行の質問のタイトルに警告が表示されます。

unsigned hash = 2166136261;

私がこれを行うとき、なぜこれが起こっているのか理解できません:

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

私はこれを手に入れます:

4294967295
2166136261

これは私のマシンの制限の下にあるようです...

警告が表示されるのはなぜですか。警告を取り除くためのオプションは何ですか。

4

1 に答える 1

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

uこれが符号なしの番号であることを示すために接尾辞が必要です。接尾辞がないuと、署名された番号になります。以来

2166136261 > 2³¹ - 1 = INT_MAX,

この整数リテラルには問題があります。

于 2010-02-27T15:56:20.510 に答える