ハッシュテーブル実装のハッシュアルゴリズムとしてFNVハッシュを使用していますが、次の行の質問タイトルに警告が表示されます。
unsigned hash = 2166136261;
私がこれを行うとき、なぜこれが起こっているのか理解できません:
printf("%u\n", UINT_MAX);
printf("2166136261\n");
私はこれを得る:
4294967295
2166136261
これは私のマシンの制限を下回っているようです...
警告が表示されるのはなぜですか?それを取り除くためのオプションは何ですか?
unsigned hash = 2166136261u; // note the u.
これが符号なしの番号であることを示すには、接尾辞u
が必要です。 u
サフィックスがないと、符号付き数値になります。以来
2166136261 > 2³¹ - 1 = INT_MAX,
この整数リテラルには問題があります。